From 868e02bd98781cfb796bb96559111125a9d0598c Mon Sep 17 00:00:00 2001 From: abhinavbansal29 Date: Fri, 13 Dec 2024 14:45:11 +0530 Subject: [PATCH] Blog for Recovery Points --- examples/data_protection/Readme.md | 185 +++++++++++++++++++ examples/data_protection/Recovery_Points.png | Bin 0 -> 29791 bytes 2 files changed, 185 insertions(+) create mode 100644 examples/data_protection/Readme.md create mode 100644 examples/data_protection/Recovery_Points.png diff --git a/examples/data_protection/Readme.md b/examples/data_protection/Readme.md new file mode 100644 index 00000000..7eb06089 --- /dev/null +++ b/examples/data_protection/Readme.md @@ -0,0 +1,185 @@ +# Recovery Points under Data Protection Namespace + +Recovery points are critical in ensuring data protection and disaster recovery for virtual machines (VMs) and volume groups (VGs). They allow for capturing the state of VMs and VGs at a specific point in time, enabling various operations such as restoration, replication, and reversion. + +This blog provides an overview of recovery points, operations like Create, Update, Read, and Delete, and other functionalities such as restoring, replicating, and reverting recovery points. A flow diagram will be included to illustrate these concepts (to be added). + +![Recovery Points workflow](Recovery_Points.png) +--- + +## Operations on Recovery Points + +### 1. Create, Update, and Delete Recovery Points +The `ntnx_recovery_points_v2` module is used to manage recovery points. It supports creating, updating, and deleting recovery points for: +- A single VM +- A single VG +- Multiple VMs or VGs +- A combination of VMs and VGs + +#### Example Code +`Create Recovery Point for Multiple VMs and VGs` +``` +- name: Create recovery point with multiple VMs and VGs + ntnx_recovery_points_v2: + nutanix_host: "{{ ip }}" + nutanix_username: "{{ username }}" + nutanix_password: "{{ password }}" + validate_certs: "{{ validate_certs }}" + name: "{{ recovery_point_name }}_5" + expiration_time: "{{ expiration_time }}" + recovery_point_type: "CRASH_CONSISTENT" + vm_recovery_points: + - vm_ext_id: "3f50a1b2-4c3d-4e6a-9b8e-1a2b3c4d5e6f" + - vm_ext_id: "7e8f9a0b-1c2d-3e4f-5a6b-7c8d9e0f1a2b" + volume_group_recovery_points: + - volume_group_ext_id: "9b8a7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d" + - volume_group_ext_id: "2d3e4f5a-6b7c-8d9e-0f1a-2b3c4d5e6f7g" + register: result + ignore_errors: true +``` +`Update Expiration Time of Recovery Points` +``` +- name: Update recovery point expiration time with check mode enabled + ntnx_recovery_points_v2: + nutanix_host: "{{ ip }}" + nutanix_username: "{{ username }}" + nutanix_password: "{{ password }}" + validate_certs: "{{ validate_certs }}" + ext_id: 6j24g6z1-4f3w-0f3q-5j2j-4n1y9d2e7j3r + expiration_time: "2024-09-30T14:15:22+00:00" + check_mode: true + register: result + ignore_errors: true +``` +`Delete a Recovery Point` +``` +- name: Delete a recovery point + ntnx_recovery_points_v2: + nutanix_host: "{{ ip }}" + nutanix_username: "{{ username }}" + nutanix_password: "{{ password }}" + validate_certs: "{{ validate_certs }}" + state: absent + ext_id: 6j24g6z1-4f3w-0f3q-5j2j-4n1y9d2e7j3r + register: result + ignore_errors: true +``` +--- + +### 2. Retrieve Recovery Point Information +The `ntnx_recovery_points_info_v2` module fetches details of recovery points. This is essential for monitoring and managing existing recovery points effectively. + +#### Example Code +`List all recovery points with filter` +``` +- name: List all recovery points with filter + ntnx_recovery_points_info_v2: + nutanix_host: "{{ ip }}" + nutanix_username: "{{ username }}" + nutanix_password: "{{ password }}" + validate_certs: "{{ validate_certs }}" + filter: "name eq 'recovery_point_name'" + register: result + ignore_errors: true +``` +`Get details of a Recovery Point` +``` +- name: Get recovery point details + ntnx_recovery_points_info_v2: + nutanix_host: "{{ ip }}" + nutanix_username: "{{ username }}" + nutanix_password: "{{ password }}" + validate_certs: "{{ validate_certs }}" + ext_id: "6j24g6z1-4f3w-0f3q-5j2j-4n1y9d2e7j3r" + register: result + ignore_errors: true +``` +--- + +## Additional Operations + +### 3. Restore Recovery Points +The `ntnx_recovery_point_restore_v2` module is used to restore a recovery point. This operation creates a clone of the VMs or VGs specified in the recovery point spec. If no specific entity is provided, clones for all entities under the top-level recovery point are created. + +#### Example Code +``` +- name: Restore recovery point for multiple VMs and VGs + ntnx_recovery_point_restore_v2: + nutanix_host: "{{ ip }}" + nutanix_username: "{{ username }}" + nutanix_password: "{{ password }}" + validate_certs: "{{ validate_certs }}" + ext_id: "6j24g6z1-4f3w-0f3q-5j2j-4n1y9d2e7j3r" + cluster_ext_id: "{{ cluster.uuid }}" + vm_recovery_point_restore_overrides: + - vm_recovery_point_ext_id: "1a2b3c4d-5e6f-7g8h-9i0j-1k2l3m4n5o6p" + - vm_recovery_point_ext_id: "4d5e6f7g-8h9i-0j1k-2l3m-4n5o6p7q8r9s" + volume_group_recovery_point_restore_overrides: + - volume_group_recovery_point_ext_id: "7g8h9i0j-1k2l-3m4n-5o6p-7q8r9s0t1u2v" + - volume_group_recovery_point_ext_id: "0j1k2l3m-4n5o-6p7q-8r9s-0t1u2v3w4x5y" + register: result + ignore_errors: true +``` +--- + +### 4. VM Revert +The `ntnx_vm_revert_v2` module reverts a VM back to the state at which the recovery point was created. This is particularly useful for undoing changes or recovering from system failures. + +#### Example Code +``` +- name: Revert a VM recovery point + ntnx_vm_revert_v2: + nutanix_host: "{{ ip }}" + nutanix_username: "{{ username }}" + nutanix_password: "{{ password }}" + validate_certs: "{{ validate_certs }}" + ext_id: "3f50a1b2-4c3d-4e6a-9b8e-1a2b3c4d5e6f" + vm_recovery_point_ext_id: "1a2b3c4d-5e6f-7g8h-9i0j-1k2l3m4n5o6p" + register: result + ignore_errors: true +``` + +--- + +### 5. Replicate Recovery Points +Replication creates a replica of a recovery point on another cluster. The `ntnx_recovery_point_replicate_v2` module requires the following setup: +1. Create an availability zone from your Prism Central to the target PC. +2. Obtain the external ID of the target PC and its cluster external ID. + +#### Example Code +``` +- name: Replicate Recovery point + ntnx_recovery_point_replicate_v2: + nutanix_host: "{{ ip }}" + nutanix_username: "{{ username }}" + nutanix_password: "{{ password }}" + validate_certs: "{{ validate_certs }}" + ext_id: "6j24g6z1-4f3w-0f3q-5j2j-4n1y9d2e7j3r" + pc_ext_id: "{{ pc_uuid_of_target_pc }}" + cluster_ext_id: "{{ cluster_uuid_of_target_pc }}" + register: result + ignore_errors: true +``` + +--- + +### 6. Retrieve VM Recovery Point Information +The `ntnx_vm_recovery_point_info_v2` module fetches detailed information about VM recovery points. This helps in auditing and verifying recovery point states. + +#### Example Code +``` +- name: Get a VM recovery point details + ntnx_vm_recovery_point_info_v2: + nutanix_host: "{{ ip }}" + nutanix_username: "{{ username }}" + nutanix_password: "{{ password }}" + validate_certs: "{{ validate_certs }}" + recovery_point_ext_id: "6j24g6z1-4f3w-0f3q-5j2j-4n1y9d2e7j3r" + vm_recovery_point_ext_id: "4d5e6f7g-8h9i-0j1k-2l3m-4n5o6p7q8r9s" + register: result + ignore_errors: true +``` + +--- + +Recovery points are an integral part of data protection strategies. The operations and modules discussed above provide a robust framework for managing and leveraging recovery points efficiently. diff --git a/examples/data_protection/Recovery_Points.png b/examples/data_protection/Recovery_Points.png new file mode 100644 index 0000000000000000000000000000000000000000..14c92d3b16dcac55a9a0bd8f29881d87d10dd9c1 GIT binary patch literal 29791 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%0A&`;J%o^d*zOq9m=uLJN!6c1?08iJ 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%0A25bEQu{XYfeq45#n!_P_yamGcm9I3 z{CR141)$ibqHqCtK;`6A#$^Bi literal 0 HcmV?d00001