# Copyright (c) 2012-2025, Mark Peek <mark@peek.org>
# All rights reserved.
#
# See LICENSE file for full license.
#
# *** Do not modify - this file is autogenerated ***


from . import AWSObject, AWSProperty, PropsDictType, Tags
from .validators import boolean


class ConnectivityInfo(AWSProperty):
    """
    `ConnectivityInfo <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-evs-environment-connectivityinfo.html>`__
    """

    props: PropsDictType = {
        "PrivateRouteServerPeerings": ([str], True),
    }


class HostInfoForCreate(AWSProperty):
    """
    `HostInfoForCreate <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-evs-environment-hostinfoforcreate.html>`__
    """

    props: PropsDictType = {
        "DedicatedHostId": (str, False),
        "HostName": (str, True),
        "InstanceType": (str, True),
        "KeyName": (str, True),
        "PlacementGroupId": (str, False),
    }


class InitialVlanInfo(AWSProperty):
    """
    `InitialVlanInfo <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-evs-environment-initialvlaninfo.html>`__
    """

    props: PropsDictType = {
        "Cidr": (str, True),
    }


class InitialVlans(AWSProperty):
    """
    `InitialVlans <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-evs-environment-initialvlans.html>`__
    """

    props: PropsDictType = {
        "EdgeVTep": (InitialVlanInfo, True),
        "ExpansionVlan1": (InitialVlanInfo, True),
        "ExpansionVlan2": (InitialVlanInfo, True),
        "Hcx": (InitialVlanInfo, True),
        "NsxUpLink": (InitialVlanInfo, True),
        "VMotion": (InitialVlanInfo, True),
        "VSan": (InitialVlanInfo, True),
        "VTep": (InitialVlanInfo, True),
        "VmManagement": (InitialVlanInfo, True),
        "VmkManagement": (InitialVlanInfo, True),
    }


class LicenseInfo(AWSProperty):
    """
    `LicenseInfo <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-evs-environment-licenseinfo.html>`__
    """

    props: PropsDictType = {
        "SolutionKey": (str, True),
        "VsanKey": (str, True),
    }


class ServiceAccessSecurityGroups(AWSProperty):
    """
    `ServiceAccessSecurityGroups <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-evs-environment-serviceaccesssecuritygroups.html>`__
    """

    props: PropsDictType = {
        "SecurityGroups": ([str], False),
    }


class VcfHostnames(AWSProperty):
    """
    `VcfHostnames <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-evs-environment-vcfhostnames.html>`__
    """

    props: PropsDictType = {
        "CloudBuilder": (str, True),
        "Nsx": (str, True),
        "NsxEdge1": (str, True),
        "NsxEdge2": (str, True),
        "NsxManager1": (str, True),
        "NsxManager2": (str, True),
        "NsxManager3": (str, True),
        "SddcManager": (str, True),
        "VCenter": (str, True),
    }


class Environment(AWSObject):
    """
    `Environment <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-evs-environment.html>`__
    """

    resource_type = "AWS::EVS::Environment"

    props: PropsDictType = {
        "ConnectivityInfo": (ConnectivityInfo, True),
        "EnvironmentName": (str, False),
        "Hosts": ([HostInfoForCreate], False),
        "InitialVlans": (InitialVlans, False),
        "KmsKeyId": (str, False),
        "LicenseInfo": (LicenseInfo, True),
        "ServiceAccessSecurityGroups": (ServiceAccessSecurityGroups, False),
        "ServiceAccessSubnetId": (str, True),
        "SiteId": (str, True),
        "Tags": (Tags, False),
        "TermsAccepted": (boolean, True),
        "VcfHostnames": (VcfHostnames, True),
        "VcfVersion": (str, True),
        "VpcId": (str, True),
    }


class Check(AWSProperty):
    """
    `Check <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-evs-environment-check.html>`__
    """

    props: PropsDictType = {
        "ImpairedSince": (str, False),
        "Result": (str, True),
        "Type": (str, True),
    }


class Secret(AWSProperty):
    """
    `Secret <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-evs-environment-secret.html>`__
    """

    props: PropsDictType = {
        "SecretArn": (str, False),
    }
