# coding=utf-8
# *** 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! ***

import copy
import warnings
import pulumi
import pulumi.runtime
from typing import Any, Mapping, Optional, Sequence, Union, overload
from .. import _utilities

__all__ = [
    'EnterpriseSnapshotPolicyCrossRegionCopyInfoArgs',
    'EnterpriseSnapshotPolicyCrossRegionCopyInfoRegionArgs',
    'EnterpriseSnapshotPolicyRetainRuleArgs',
    'EnterpriseSnapshotPolicyScheduleArgs',
    'EnterpriseSnapshotPolicySpecialRetainRulesArgs',
    'EnterpriseSnapshotPolicySpecialRetainRulesRuleArgs',
    'EnterpriseSnapshotPolicyStorageRuleArgs',
    'SolutionInstanceParameterArgs',
]

@pulumi.input_type
class EnterpriseSnapshotPolicyCrossRegionCopyInfoArgs:
    def __init__(__self__, *,
                 enabled: Optional[pulumi.Input[bool]] = None,
                 regions: Optional[pulumi.Input[Sequence[pulumi.Input['EnterpriseSnapshotPolicyCrossRegionCopyInfoRegionArgs']]]] = None):
        """
        :param pulumi.Input[bool] enabled: Enable Snapshot replication.
        :param pulumi.Input[Sequence[pulumi.Input['EnterpriseSnapshotPolicyCrossRegionCopyInfoRegionArgs']]] regions: Destination region for Snapshot replication. See `regions` below.
        """
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)
        if regions is not None:
            pulumi.set(__self__, "regions", regions)

    @property
    @pulumi.getter
    def enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        Enable Snapshot replication.
        """
        return pulumi.get(self, "enabled")

    @enabled.setter
    def enabled(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "enabled", value)

    @property
    @pulumi.getter
    def regions(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['EnterpriseSnapshotPolicyCrossRegionCopyInfoRegionArgs']]]]:
        """
        Destination region for Snapshot replication. See `regions` below.
        """
        return pulumi.get(self, "regions")

    @regions.setter
    def regions(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['EnterpriseSnapshotPolicyCrossRegionCopyInfoRegionArgs']]]]):
        pulumi.set(self, "regions", value)


@pulumi.input_type
class EnterpriseSnapshotPolicyCrossRegionCopyInfoRegionArgs:
    def __init__(__self__, *,
                 region_id: Optional[pulumi.Input[str]] = None,
                 retain_days: Optional[pulumi.Input[int]] = None):
        if region_id is not None:
            pulumi.set(__self__, "region_id", region_id)
        if retain_days is not None:
            pulumi.set(__self__, "retain_days", retain_days)

    @property
    @pulumi.getter(name="regionId")
    def region_id(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "region_id")

    @region_id.setter
    def region_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "region_id", value)

    @property
    @pulumi.getter(name="retainDays")
    def retain_days(self) -> Optional[pulumi.Input[int]]:
        return pulumi.get(self, "retain_days")

    @retain_days.setter
    def retain_days(self, value: Optional[pulumi.Input[int]]):
        pulumi.set(self, "retain_days", value)


@pulumi.input_type
class EnterpriseSnapshotPolicyRetainRuleArgs:
    def __init__(__self__, *,
                 number: Optional[pulumi.Input[int]] = None,
                 time_interval: Optional[pulumi.Input[int]] = None,
                 time_unit: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[int] number: Retention based on counting method.
        :param pulumi.Input[int] time_interval: Time unit.
        :param pulumi.Input[str] time_unit: Time-based retention.
        """
        if number is not None:
            pulumi.set(__self__, "number", number)
        if time_interval is not None:
            pulumi.set(__self__, "time_interval", time_interval)
        if time_unit is not None:
            pulumi.set(__self__, "time_unit", time_unit)

    @property
    @pulumi.getter
    def number(self) -> Optional[pulumi.Input[int]]:
        """
        Retention based on counting method.
        """
        return pulumi.get(self, "number")

    @number.setter
    def number(self, value: Optional[pulumi.Input[int]]):
        pulumi.set(self, "number", value)

    @property
    @pulumi.getter(name="timeInterval")
    def time_interval(self) -> Optional[pulumi.Input[int]]:
        """
        Time unit.
        """
        return pulumi.get(self, "time_interval")

    @time_interval.setter
    def time_interval(self, value: Optional[pulumi.Input[int]]):
        pulumi.set(self, "time_interval", value)

    @property
    @pulumi.getter(name="timeUnit")
    def time_unit(self) -> Optional[pulumi.Input[str]]:
        """
        Time-based retention.
        """
        return pulumi.get(self, "time_unit")

    @time_unit.setter
    def time_unit(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "time_unit", value)


@pulumi.input_type
class EnterpriseSnapshotPolicyScheduleArgs:
    def __init__(__self__, *,
                 cron_expression: pulumi.Input[str]):
        """
        :param pulumi.Input[str] cron_expression: CronTab expression.
        """
        pulumi.set(__self__, "cron_expression", cron_expression)

    @property
    @pulumi.getter(name="cronExpression")
    def cron_expression(self) -> pulumi.Input[str]:
        """
        CronTab expression.
        """
        return pulumi.get(self, "cron_expression")

    @cron_expression.setter
    def cron_expression(self, value: pulumi.Input[str]):
        pulumi.set(self, "cron_expression", value)


@pulumi.input_type
class EnterpriseSnapshotPolicySpecialRetainRulesArgs:
    def __init__(__self__, *,
                 enabled: Optional[pulumi.Input[bool]] = None,
                 rules: Optional[pulumi.Input[Sequence[pulumi.Input['EnterpriseSnapshotPolicySpecialRetainRulesRuleArgs']]]] = None):
        """
        :param pulumi.Input[bool] enabled: Whether special reservations are enabled. Value range:
               - true
               - false.
        :param pulumi.Input[Sequence[pulumi.Input['EnterpriseSnapshotPolicySpecialRetainRulesRuleArgs']]] rules: List of special retention rules. See `rules` below.
        """
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)
        if rules is not None:
            pulumi.set(__self__, "rules", rules)

    @property
    @pulumi.getter
    def enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        Whether special reservations are enabled. Value range:
        - true
        - false.
        """
        return pulumi.get(self, "enabled")

    @enabled.setter
    def enabled(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "enabled", value)

    @property
    @pulumi.getter
    def rules(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['EnterpriseSnapshotPolicySpecialRetainRulesRuleArgs']]]]:
        """
        List of special retention rules. See `rules` below.
        """
        return pulumi.get(self, "rules")

    @rules.setter
    def rules(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['EnterpriseSnapshotPolicySpecialRetainRulesRuleArgs']]]]):
        pulumi.set(self, "rules", value)


@pulumi.input_type
class EnterpriseSnapshotPolicySpecialRetainRulesRuleArgs:
    def __init__(__self__, *,
                 special_period_unit: Optional[pulumi.Input[str]] = None,
                 time_interval: Optional[pulumi.Input[int]] = None,
                 time_unit: Optional[pulumi.Input[str]] = None):
        if special_period_unit is not None:
            pulumi.set(__self__, "special_period_unit", special_period_unit)
        if time_interval is not None:
            pulumi.set(__self__, "time_interval", time_interval)
        if time_unit is not None:
            pulumi.set(__self__, "time_unit", time_unit)

    @property
    @pulumi.getter(name="specialPeriodUnit")
    def special_period_unit(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "special_period_unit")

    @special_period_unit.setter
    def special_period_unit(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "special_period_unit", value)

    @property
    @pulumi.getter(name="timeInterval")
    def time_interval(self) -> Optional[pulumi.Input[int]]:
        return pulumi.get(self, "time_interval")

    @time_interval.setter
    def time_interval(self, value: Optional[pulumi.Input[int]]):
        pulumi.set(self, "time_interval", value)

    @property
    @pulumi.getter(name="timeUnit")
    def time_unit(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "time_unit")

    @time_unit.setter
    def time_unit(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "time_unit", value)


@pulumi.input_type
class EnterpriseSnapshotPolicyStorageRuleArgs:
    def __init__(__self__, *,
                 enable_immediate_access: Optional[pulumi.Input[bool]] = None):
        """
        :param pulumi.Input[bool] enable_immediate_access: Snapshot speed available.
        """
        if enable_immediate_access is not None:
            pulumi.set(__self__, "enable_immediate_access", enable_immediate_access)

    @property
    @pulumi.getter(name="enableImmediateAccess")
    def enable_immediate_access(self) -> Optional[pulumi.Input[bool]]:
        """
        Snapshot speed available.
        """
        return pulumi.get(self, "enable_immediate_access")

    @enable_immediate_access.setter
    def enable_immediate_access(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "enable_immediate_access", value)


@pulumi.input_type
class SolutionInstanceParameterArgs:
    def __init__(__self__, *,
                 parameter_key: pulumi.Input[str],
                 parameter_value: pulumi.Input[str]):
        """
        :param pulumi.Input[str] parameter_key: Create parameter Key.
        :param pulumi.Input[str] parameter_value: Create parameter Value.
        """
        pulumi.set(__self__, "parameter_key", parameter_key)
        pulumi.set(__self__, "parameter_value", parameter_value)

    @property
    @pulumi.getter(name="parameterKey")
    def parameter_key(self) -> pulumi.Input[str]:
        """
        Create parameter Key.
        """
        return pulumi.get(self, "parameter_key")

    @parameter_key.setter
    def parameter_key(self, value: pulumi.Input[str]):
        pulumi.set(self, "parameter_key", value)

    @property
    @pulumi.getter(name="parameterValue")
    def parameter_value(self) -> pulumi.Input[str]:
        """
        Create parameter Value.
        """
        return pulumi.get(self, "parameter_value")

    @parameter_value.setter
    def parameter_value(self, value: pulumi.Input[str]):
        pulumi.set(self, "parameter_value", value)


