# 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 warnings
import pulumi
import pulumi.runtime
from typing import Any, Mapping, Optional, Sequence, Union, overload
from .. import _utilities

__all__ = [
    'AccountActiveDirectoryArgs',
    'SnapshotPolicyDailyScheduleArgs',
    'SnapshotPolicyHourlyScheduleArgs',
    'SnapshotPolicyMonthlyScheduleArgs',
    'SnapshotPolicyWeeklyScheduleArgs',
    'VolumeDataProtectionReplicationArgs',
    'VolumeDataProtectionSnapshotPolicyArgs',
    'VolumeExportPolicyRuleArgs',
]

@pulumi.input_type
class AccountActiveDirectoryArgs:
    def __init__(__self__, *,
                 dns_servers: pulumi.Input[Sequence[pulumi.Input[str]]],
                 domain: pulumi.Input[str],
                 password: pulumi.Input[str],
                 smb_server_name: pulumi.Input[str],
                 username: pulumi.Input[str],
                 organizational_unit: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[Sequence[pulumi.Input[str]]] dns_servers: A list of DNS server IP addresses for the Active Directory domain. Only allows `IPv4` address.
        :param pulumi.Input[str] domain: The name of the Active Directory domain.
        :param pulumi.Input[str] password: The password associated with the `username`.
        :param pulumi.Input[str] smb_server_name: The NetBIOS name which should be used for the NetApp SMB Server, which will be registered as a computer account in the AD and used to mount volumes.
        :param pulumi.Input[str] username: The Username of Active Directory Domain Administrator.
        :param pulumi.Input[str] organizational_unit: The Organizational Unit (OU) within the Active Directory Domain.
        """
        pulumi.set(__self__, "dns_servers", dns_servers)
        pulumi.set(__self__, "domain", domain)
        pulumi.set(__self__, "password", password)
        pulumi.set(__self__, "smb_server_name", smb_server_name)
        pulumi.set(__self__, "username", username)
        if organizational_unit is not None:
            pulumi.set(__self__, "organizational_unit", organizational_unit)

    @property
    @pulumi.getter(name="dnsServers")
    def dns_servers(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        A list of DNS server IP addresses for the Active Directory domain. Only allows `IPv4` address.
        """
        return pulumi.get(self, "dns_servers")

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

    @property
    @pulumi.getter
    def domain(self) -> pulumi.Input[str]:
        """
        The name of the Active Directory domain.
        """
        return pulumi.get(self, "domain")

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

    @property
    @pulumi.getter
    def password(self) -> pulumi.Input[str]:
        """
        The password associated with the `username`.
        """
        return pulumi.get(self, "password")

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

    @property
    @pulumi.getter(name="smbServerName")
    def smb_server_name(self) -> pulumi.Input[str]:
        """
        The NetBIOS name which should be used for the NetApp SMB Server, which will be registered as a computer account in the AD and used to mount volumes.
        """
        return pulumi.get(self, "smb_server_name")

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

    @property
    @pulumi.getter
    def username(self) -> pulumi.Input[str]:
        """
        The Username of Active Directory Domain Administrator.
        """
        return pulumi.get(self, "username")

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

    @property
    @pulumi.getter(name="organizationalUnit")
    def organizational_unit(self) -> Optional[pulumi.Input[str]]:
        """
        The Organizational Unit (OU) within the Active Directory Domain.
        """
        return pulumi.get(self, "organizational_unit")

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


@pulumi.input_type
class SnapshotPolicyDailyScheduleArgs:
    def __init__(__self__, *,
                 hour: pulumi.Input[int],
                 minute: pulumi.Input[int],
                 snapshots_to_keep: pulumi.Input[int]):
        """
        :param pulumi.Input[int] hour: Hour of the day that the snapshots will be created, valid range is from 0 to 23.
        :param pulumi.Input[int] minute: Minute of the hour that the snapshots will be created, valid range is from 0 to 59.
        :param pulumi.Input[int] snapshots_to_keep: How many hourly snapshots to keep, valid range is from 0 to 255.
        """
        pulumi.set(__self__, "hour", hour)
        pulumi.set(__self__, "minute", minute)
        pulumi.set(__self__, "snapshots_to_keep", snapshots_to_keep)

    @property
    @pulumi.getter
    def hour(self) -> pulumi.Input[int]:
        """
        Hour of the day that the snapshots will be created, valid range is from 0 to 23.
        """
        return pulumi.get(self, "hour")

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

    @property
    @pulumi.getter
    def minute(self) -> pulumi.Input[int]:
        """
        Minute of the hour that the snapshots will be created, valid range is from 0 to 59.
        """
        return pulumi.get(self, "minute")

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

    @property
    @pulumi.getter(name="snapshotsToKeep")
    def snapshots_to_keep(self) -> pulumi.Input[int]:
        """
        How many hourly snapshots to keep, valid range is from 0 to 255.
        """
        return pulumi.get(self, "snapshots_to_keep")

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


@pulumi.input_type
class SnapshotPolicyHourlyScheduleArgs:
    def __init__(__self__, *,
                 minute: pulumi.Input[int],
                 snapshots_to_keep: pulumi.Input[int]):
        """
        :param pulumi.Input[int] minute: Minute of the hour that the snapshots will be created, valid range is from 0 to 59.
        :param pulumi.Input[int] snapshots_to_keep: How many hourly snapshots to keep, valid range is from 0 to 255.
        """
        pulumi.set(__self__, "minute", minute)
        pulumi.set(__self__, "snapshots_to_keep", snapshots_to_keep)

    @property
    @pulumi.getter
    def minute(self) -> pulumi.Input[int]:
        """
        Minute of the hour that the snapshots will be created, valid range is from 0 to 59.
        """
        return pulumi.get(self, "minute")

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

    @property
    @pulumi.getter(name="snapshotsToKeep")
    def snapshots_to_keep(self) -> pulumi.Input[int]:
        """
        How many hourly snapshots to keep, valid range is from 0 to 255.
        """
        return pulumi.get(self, "snapshots_to_keep")

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


@pulumi.input_type
class SnapshotPolicyMonthlyScheduleArgs:
    def __init__(__self__, *,
                 days_of_months: pulumi.Input[Sequence[pulumi.Input[int]]],
                 hour: pulumi.Input[int],
                 minute: pulumi.Input[int],
                 snapshots_to_keep: pulumi.Input[int]):
        """
        :param pulumi.Input[int] hour: Hour of the day that the snapshots will be created, valid range is from 0 to 23.
        :param pulumi.Input[int] minute: Minute of the hour that the snapshots will be created, valid range is from 0 to 59.
        :param pulumi.Input[int] snapshots_to_keep: How many hourly snapshots to keep, valid range is from 0 to 255.
        """
        pulumi.set(__self__, "days_of_months", days_of_months)
        pulumi.set(__self__, "hour", hour)
        pulumi.set(__self__, "minute", minute)
        pulumi.set(__self__, "snapshots_to_keep", snapshots_to_keep)

    @property
    @pulumi.getter(name="daysOfMonths")
    def days_of_months(self) -> pulumi.Input[Sequence[pulumi.Input[int]]]:
        return pulumi.get(self, "days_of_months")

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

    @property
    @pulumi.getter
    def hour(self) -> pulumi.Input[int]:
        """
        Hour of the day that the snapshots will be created, valid range is from 0 to 23.
        """
        return pulumi.get(self, "hour")

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

    @property
    @pulumi.getter
    def minute(self) -> pulumi.Input[int]:
        """
        Minute of the hour that the snapshots will be created, valid range is from 0 to 59.
        """
        return pulumi.get(self, "minute")

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

    @property
    @pulumi.getter(name="snapshotsToKeep")
    def snapshots_to_keep(self) -> pulumi.Input[int]:
        """
        How many hourly snapshots to keep, valid range is from 0 to 255.
        """
        return pulumi.get(self, "snapshots_to_keep")

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


@pulumi.input_type
class SnapshotPolicyWeeklyScheduleArgs:
    def __init__(__self__, *,
                 days_of_weeks: pulumi.Input[Sequence[pulumi.Input[str]]],
                 hour: pulumi.Input[int],
                 minute: pulumi.Input[int],
                 snapshots_to_keep: pulumi.Input[int]):
        """
        :param pulumi.Input[Sequence[pulumi.Input[str]]] days_of_weeks: List of the week days using English names when the snapshots will be created.
        :param pulumi.Input[int] hour: Hour of the day that the snapshots will be created, valid range is from 0 to 23.
        :param pulumi.Input[int] minute: Minute of the hour that the snapshots will be created, valid range is from 0 to 59.
        :param pulumi.Input[int] snapshots_to_keep: How many hourly snapshots to keep, valid range is from 0 to 255.
        """
        pulumi.set(__self__, "days_of_weeks", days_of_weeks)
        pulumi.set(__self__, "hour", hour)
        pulumi.set(__self__, "minute", minute)
        pulumi.set(__self__, "snapshots_to_keep", snapshots_to_keep)

    @property
    @pulumi.getter(name="daysOfWeeks")
    def days_of_weeks(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        List of the week days using English names when the snapshots will be created.
        """
        return pulumi.get(self, "days_of_weeks")

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

    @property
    @pulumi.getter
    def hour(self) -> pulumi.Input[int]:
        """
        Hour of the day that the snapshots will be created, valid range is from 0 to 23.
        """
        return pulumi.get(self, "hour")

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

    @property
    @pulumi.getter
    def minute(self) -> pulumi.Input[int]:
        """
        Minute of the hour that the snapshots will be created, valid range is from 0 to 59.
        """
        return pulumi.get(self, "minute")

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

    @property
    @pulumi.getter(name="snapshotsToKeep")
    def snapshots_to_keep(self) -> pulumi.Input[int]:
        """
        How many hourly snapshots to keep, valid range is from 0 to 255.
        """
        return pulumi.get(self, "snapshots_to_keep")

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


@pulumi.input_type
class VolumeDataProtectionReplicationArgs:
    def __init__(__self__, *,
                 remote_volume_location: pulumi.Input[str],
                 remote_volume_resource_id: pulumi.Input[str],
                 replication_frequency: pulumi.Input[str],
                 endpoint_type: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] remote_volume_location: Location of the primary volume.
        :param pulumi.Input[str] remote_volume_resource_id: Resource ID of the primary volume.
        :param pulumi.Input[str] replication_frequency: Replication frequency, supported values are '10minutes', 'hourly', 'daily', values are case sensitive.
        :param pulumi.Input[str] endpoint_type: The endpoint type, default value is `dst` for destination.
        """
        pulumi.set(__self__, "remote_volume_location", remote_volume_location)
        pulumi.set(__self__, "remote_volume_resource_id", remote_volume_resource_id)
        pulumi.set(__self__, "replication_frequency", replication_frequency)
        if endpoint_type is not None:
            pulumi.set(__self__, "endpoint_type", endpoint_type)

    @property
    @pulumi.getter(name="remoteVolumeLocation")
    def remote_volume_location(self) -> pulumi.Input[str]:
        """
        Location of the primary volume.
        """
        return pulumi.get(self, "remote_volume_location")

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

    @property
    @pulumi.getter(name="remoteVolumeResourceId")
    def remote_volume_resource_id(self) -> pulumi.Input[str]:
        """
        Resource ID of the primary volume.
        """
        return pulumi.get(self, "remote_volume_resource_id")

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

    @property
    @pulumi.getter(name="replicationFrequency")
    def replication_frequency(self) -> pulumi.Input[str]:
        """
        Replication frequency, supported values are '10minutes', 'hourly', 'daily', values are case sensitive.
        """
        return pulumi.get(self, "replication_frequency")

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

    @property
    @pulumi.getter(name="endpointType")
    def endpoint_type(self) -> Optional[pulumi.Input[str]]:
        """
        The endpoint type, default value is `dst` for destination.
        """
        return pulumi.get(self, "endpoint_type")

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


@pulumi.input_type
class VolumeDataProtectionSnapshotPolicyArgs:
    def __init__(__self__, *,
                 snapshot_policy_id: pulumi.Input[str]):
        """
        :param pulumi.Input[str] snapshot_policy_id: Resource ID of the snapshot policy to apply to the volume.
        """
        pulumi.set(__self__, "snapshot_policy_id", snapshot_policy_id)

    @property
    @pulumi.getter(name="snapshotPolicyId")
    def snapshot_policy_id(self) -> pulumi.Input[str]:
        """
        Resource ID of the snapshot policy to apply to the volume.
        """
        return pulumi.get(self, "snapshot_policy_id")

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


@pulumi.input_type
class VolumeExportPolicyRuleArgs:
    def __init__(__self__, *,
                 allowed_clients: pulumi.Input[Sequence[pulumi.Input[str]]],
                 rule_index: pulumi.Input[int],
                 protocols_enabled: Optional[pulumi.Input[str]] = None,
                 root_access_enabled: Optional[pulumi.Input[bool]] = None,
                 unix_read_only: Optional[pulumi.Input[bool]] = None,
                 unix_read_write: Optional[pulumi.Input[bool]] = None):
        """
        :param pulumi.Input[Sequence[pulumi.Input[str]]] allowed_clients: A list of allowed clients IPv4 addresses.
        :param pulumi.Input[int] rule_index: The index number of the rule.
        :param pulumi.Input[str] protocols_enabled: A list of allowed protocols. Valid values include `CIFS`, `NFSv3`, or `NFSv4.1`. Only one value is supported at this time. This replaces the previous arguments: `cifs_enabled`, `nfsv3_enabled` and `nfsv4_enabled`.
        :param pulumi.Input[bool] root_access_enabled: Is root access permitted to this volume?
        :param pulumi.Input[bool] unix_read_only: Is the file system on unix read only?
        :param pulumi.Input[bool] unix_read_write: Is the file system on unix read and write?
        """
        pulumi.set(__self__, "allowed_clients", allowed_clients)
        pulumi.set(__self__, "rule_index", rule_index)
        if protocols_enabled is not None:
            pulumi.set(__self__, "protocols_enabled", protocols_enabled)
        if root_access_enabled is not None:
            pulumi.set(__self__, "root_access_enabled", root_access_enabled)
        if unix_read_only is not None:
            pulumi.set(__self__, "unix_read_only", unix_read_only)
        if unix_read_write is not None:
            pulumi.set(__self__, "unix_read_write", unix_read_write)

    @property
    @pulumi.getter(name="allowedClients")
    def allowed_clients(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        A list of allowed clients IPv4 addresses.
        """
        return pulumi.get(self, "allowed_clients")

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

    @property
    @pulumi.getter(name="ruleIndex")
    def rule_index(self) -> pulumi.Input[int]:
        """
        The index number of the rule.
        """
        return pulumi.get(self, "rule_index")

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

    @property
    @pulumi.getter(name="protocolsEnabled")
    def protocols_enabled(self) -> Optional[pulumi.Input[str]]:
        """
        A list of allowed protocols. Valid values include `CIFS`, `NFSv3`, or `NFSv4.1`. Only one value is supported at this time. This replaces the previous arguments: `cifs_enabled`, `nfsv3_enabled` and `nfsv4_enabled`.
        """
        return pulumi.get(self, "protocols_enabled")

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

    @property
    @pulumi.getter(name="rootAccessEnabled")
    def root_access_enabled(self) -> Optional[pulumi.Input[bool]]:
        """
        Is root access permitted to this volume?
        """
        return pulumi.get(self, "root_access_enabled")

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

    @property
    @pulumi.getter(name="unixReadOnly")
    def unix_read_only(self) -> Optional[pulumi.Input[bool]]:
        """
        Is the file system on unix read only?
        """
        return pulumi.get(self, "unix_read_only")

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

    @property
    @pulumi.getter(name="unixReadWrite")
    def unix_read_write(self) -> Optional[pulumi.Input[bool]]:
        """
        Is the file system on unix read and write?
        """
        return pulumi.get(self, "unix_read_write")

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


