// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***

using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Threading.Tasks;
using Pulumi.Serialization;
using Pulumi;

namespace PiersKarsenbarg.Nutanix.Outputs
{

    [OutputType]
    public sealed class GetProtectionRulesEntityResult
    {
        public readonly string ApiVersion;
        /// <summary>
        /// (Required) This encodes the datapipes between various availability zones and\nthe backup policy of the pipes.
        /// * `availability_zone_connectivity_list.destination_availability_zone_index` - (Optional/Computed) Index of the availability zone.
        /// * `availability_zone_connectivity_list.source_availability_zone_index` - (Optional/Computed) Index of the availability zone.
        /// * `availability_zone_connectivity_list.snapshot_schedule_list` - (Optional/Computed) Snapshot schedules for the pair of the availability zones.
        /// * `availability_zone_connectivity_list.snapshot_schedule_list.#.recovery_point_objective_secs` - (Required) "A recovery point objective (RPO) is the maximum acceptable amount of data loss.
        /// * `availability_zone_connectivity_list.snapshot_schedule_list.#.local_snapshot_retention_policy` - (Optional/Computed) This describes the snapshot retention policy for this availability zone.
        /// * `availability_zone_connectivity_list.snapshot_schedule_list.#.local_snapshot_retention_policy.0.num_snapshots` - (Optional/Computed) Number of snapshots need to be retained.
        /// * `availability_zone_connectivity_list.snapshot_schedule_list.#.local_snapshot_retention_policy.0.rollup_retention_policy_multiple` - (Optional/Computed) Multiplier to 'snapshot_interval_type'.
        /// * `availability_zone_connectivity_list.snapshot_schedule_list.#.local_snapshot_retention_policy.0.rollup_retention_policy_snapshot_interval_type` - (Optional/Computed)
        /// * `availability_zone_connectivity_list.snapshot_schedule_list.#.auto_suspend_timeout_secs` - (Optional/Computed) Auto suspend timeout in case of connection failure between the sites.
        /// * `availability_zone_connectivity_list.snapshot_schedule_list.#.snapshot_type` - (Optional/Computed) Crash consistent or Application Consistent snapshot.
        /// * `availability_zone_connectivity_list.snapshot_schedule_list.#.remote_snapshot_retention_policy` - (Optional/Computed) This describes the snapshot retention policy for this availability zone.
        /// </summary>
        public readonly ImmutableArray<Outputs.GetProtectionRulesEntityAvailabilityZoneConnectivityListResult> AvailabilityZoneConnectivityLists;
        public readonly ImmutableArray<Outputs.GetProtectionRulesEntityCategoryResult> Categories;
        /// <summary>
        /// (Optional/Computed)
        /// * `category_filter.0.type` - (Optional/Computed) The type of the filter being used.
        /// * `category_filter.0.kind_list` - (Optional/Computed) List of kinds associated with this filter.
        /// * `category_filter.0.params` - (Optional/Computed) A list of category key and list of values.
        /// </summary>
        public readonly ImmutableArray<Outputs.GetProtectionRulesEntityCategoryFilterResult> CategoryFilters;
        public readonly string Description;
        public readonly ImmutableDictionary<string, string> Metadata;
        /// <summary>
        /// (Optional) the name.
        /// </summary>
        public readonly string Name;
        /// <summary>
        /// (Required) A list of availability zones, each of which, receives a replica\nof the data for the entities protected by this protection rule.
        /// * `ordered_availability_zone_list.#.cluster_uuid` - (Optional/Computed) UUID of specific cluster to which we will be replicating.
        /// * `ordered_availability_zone_list.#.availability_zone_url` - (Optional/Computed) The FQDN or IP address of the availability zone.
        /// </summary>
        public readonly ImmutableArray<Outputs.GetProtectionRulesEntityOrderedAvailabilityZoneListResult> OrderedAvailabilityZoneLists;
        public readonly ImmutableArray<Outputs.GetProtectionRulesEntityOwnerReferenceResult> OwnerReferences;
        public readonly ImmutableArray<Outputs.GetProtectionRulesEntityProjectReferenceResult> ProjectReferences;
        public readonly string StartTime;
        public readonly string State;

        [OutputConstructor]
        private GetProtectionRulesEntityResult(
            string apiVersion,

            ImmutableArray<Outputs.GetProtectionRulesEntityAvailabilityZoneConnectivityListResult> availabilityZoneConnectivityLists,

            ImmutableArray<Outputs.GetProtectionRulesEntityCategoryResult> categories,

            ImmutableArray<Outputs.GetProtectionRulesEntityCategoryFilterResult> categoryFilters,

            string description,

            ImmutableDictionary<string, string> metadata,

            string name,

            ImmutableArray<Outputs.GetProtectionRulesEntityOrderedAvailabilityZoneListResult> orderedAvailabilityZoneLists,

            ImmutableArray<Outputs.GetProtectionRulesEntityOwnerReferenceResult> ownerReferences,

            ImmutableArray<Outputs.GetProtectionRulesEntityProjectReferenceResult> projectReferences,

            string startTime,

            string state)
        {
            ApiVersion = apiVersion;
            AvailabilityZoneConnectivityLists = availabilityZoneConnectivityLists;
            Categories = categories;
            CategoryFilters = categoryFilters;
            Description = description;
            Metadata = metadata;
            Name = name;
            OrderedAvailabilityZoneLists = orderedAvailabilityZoneLists;
            OwnerReferences = ownerReferences;
            ProjectReferences = projectReferences;
            StartTime = startTime;
            State = state;
        }
    }
}
