Modifiez les ressources au fur et à mesure de leur restauration à l'aide de ressources personnalisées
Les transformations de ressources permettent de modifier une ressource pendant sa restauration. Ceci est utile lorsque la version restaurée doit différer de l'originale, par exemple pour mettre à jour un nom d'hôte dans un ConfigMap lors de la restauration d'une application sur un cluster différent.
Comment fonctionne la modification des ressources
Le champ transformations dans SnapshotRestore, BackupRestore, AppMirrorRelationship et d'autres ressources de restauration vous permet de modifier les ressources Kubernetes pendant le processus de restauration. Ceci est utile lorsque l'application restaurée doit être configurée différemment de l'originale, par exemple en modifiant les noms d'hôtes, les URL de registre, les limites de ressources ou les variables d'environnement.
Les transformations de ressources utilisent "Correctif JSON RFC 6902" des opérations et "Pointeur JSON RFC 6901" des chemins pour cibler et modifier des champs spécifiques au sein des ressources Kubernetes.
La structure de base d'un objet de restauration contenant des transformations de ressources est présentée ci-dessous :
apiVersion: protect.trident.netapp.io/v1
kind: SnapshotRestore
metadata:
name: my-restore
namespace: target-namespace
spec:
appVaultRef: my-vault
appArchivePath: /path/to/snapshot
namespaceMapping:
- source: source-ns
destination: target-ns
transformations:
- resource:
kind: ConfigMap # Required: resource kind
group: "" # Optional: API group (empty for core resources)
version: "" # Optional: API version
name: "" # Optional: specific resource name
operations:
- op: replace # Operation type
path: "/data/key" # JSON Pointer path
value: "new-value" # New value (for add/replace/test)
Ressources prises en charge
Vous pouvez utiliser les transformations de ressources avec les ressources qui correspondent aux critères suivants :
-
kind (obligatoire) : Le type de ressource Kubernetes (par exemple,
ConfigMap,Deployment,Pod) -
groupe (facultatif) : Le groupe d’API (par exemple,
apps,route.openshift.io) — à omettre pour les ressources principales -
version (facultatif) : La version de l’API (par exemple,
v1,v1beta1) -
nom (facultatif) : Appliquer uniquement à une ressource spécifique par nom
|
|
La modification de PersistentVolumeClaims et des espaces de noms n'est actuellement pas prise en charge. |
Opérations prises en charge
Vous pouvez utiliser les opérations suivantes pour modifier les ressources : add, copy, move, remove, replace, et test.
Ajouter une valeur à une ressource
Utilisez l' `add`opération pour ajouter un nouveau champ ou une nouvelle valeur au chemin spécifié. Vous pouvez ajouter des données à des objets ou à des tableaux.
L'exemple suivant ajoute un sélecteur de nœud à une Deployment ressource :
transformations:
- resource:
kind: Deployment
operations:
- op: add
path: "/spec/template/spec/nodeSelector"
value:
"topology.kubernetes.io/zone": "us-east-1a"
disktype: "ssd"
Utilisez la commande suivante pour exécuter cette transformation en ligne de commandes :
tridentctl-protect create snapshotrestore <restore_name> \
--snapshot <namespace/snapshot-name> \
--namespace-mapping <source-ns>:<dest-ns> \
--transformation 'apps,v1,Deployment:add{"path":"/spec/template/spec/nodeSelector","value":{"topology.kubernetes.io/zone":"us-east-1a","disktype":"ssd"}}'
Copier une valeur dans une ressource
Utilisez l' `copy`opération pour copier une valeur d'un chemin à un autre au sein de la même ressource. La source reste inchangée.
L'exemple suivant duplique une clé de données pour un objet ConfigMap :
transformations:
- resource:
kind: ConfigMap
operations:
- op: copy
from: "/data/source-key"
path: "/data/backup-key"
Utilisez la commande suivante pour exécuter cette transformation en ligne de commandes :
tridentctl-protect create snapshotrestore <restore_name> \
--snapshot <namespace/snapshot-name> \
--namespace-mapping <source-ns>:<dest-ns> \
--transformation ',v1,ConfigMap:copy{"from":"/data/source-key","path":"/data/backup-key"}'
Déplacer une valeur au sein d'une ressource
Utilisez l' `move`opération pour déplacer une valeur d'un chemin à un autre au sein de la même ressource. La source est supprimée et la valeur est placée à la destination.
L'exemple suivant renomme une clé de données pour un objet ConfigMap :
transformations:
- resource:
kind: ConfigMap
operations:
- op: move
from: "/data/OLD_KEY"
path: "/data/NEW_KEY"
Utilisez la commande suivante pour exécuter cette transformation en ligne de commandes :
tridentctl-protect create snapshotrestore <restore_name> \
--snapshot <namespace/snapshot-name> \
--namespace-mapping <source-ns>:<dest-ns> \
--transformation ',v1,ConfigMap:move{"from":"/data/OLD_KEY","path":"/data/NEW_KEY"}'
Supprimer une valeur d'une ressource
Utilisez l' `remove`opération pour supprimer un champ ou une valeur au chemin spécifié.
L'exemple suivant supprime une annotation d'une ConfigMap ressource :
transformations:
- resource:
kind: ConfigMap
operations:
- op: remove
path: "/metadata/annotations/kubectl.kubernetes.io~1last-applied-configuration"
|
|
Dans le chemin de l'exemple ci-dessus, ~1 est la séquence d'échappement du pointeur JSON pour /.
|
Utilisez la commande suivante pour exécuter cette transformation en ligne de commandes :
tridentctl-protect create snapshotrestore <restore_name> \
--snapshot <namespace/snapshot-name> \
--namespace-mapping <source-ns>:<dest-ns> \
--transformation ',v1,ConfigMap:remove{"path":"/metadata/annotations/kubectl.kubernetes.io~1last-applied-configuration"}'
Remplacer une valeur dans une ressource
Utilisez l' `replace`opération pour remplacer une valeur existante dans une ressource au chemin spécifié. Le chemin JSON doit déjà exister.
L'exemple suivant modifie le nom d'hôte d'un objet Route :
transformations:
- resource:
kind: Route
group: route.openshift.io
operations:
- op: replace
path: "/spec/host"
value: "prod.example.com"
Utilisez la commande suivante pour exécuter cette transformation en ligne de commandes :
tridentctl-protect create snapshotrestore <restore_name> \
--snapshot <namespace/snapshot-name> \
--namespace-mapping <source-ns>:<dest-ns> \
--transformation 'route.openshift.io,v1,Route:replace{"path":"/spec/host","value":"prod.example.com"}'
Tester la modification de la ressource
Utilisez l' `test`opération pour vérifier que la valeur à un chemin correspond à une valeur attendue avant que les autres opérations ne soient appliquées. Si le test échoue, la modification entière est annulée.
L'exemple suivant met à jour database-host uniquement si environment est défini sur staging :
transformations:
- resource:
kind: ConfigMap
operations:
- op: test
path: "/data/environment"
value: "staging"
- op: replace
path: "/data/database-host"
value: "prod-db.example.com"
Utilisez la commande suivante pour exécuter cette transformation en ligne de commandes :
tridentctl-protect create snapshotrestore <restore_name> \
--snapshot <namespace/snapshot-name> \
--namespace-mapping <source-ns>:<dest-ns> \
--transformation ',v1,ConfigMap:test{"path":"/data/environment","value":"staging"},replace{"path":"/data/database-host","value":"prod-db.example.com"}'