# 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 builtins
import copy
import warnings
import sys
import pulumi
import pulumi.runtime
from typing import Any, Mapping, Optional, Sequence, Union, overload
if sys.version_info >= (3, 11):
    from typing import NotRequired, TypedDict, TypeAlias
else:
    from typing_extensions import NotRequired, TypedDict, TypeAlias
from .. import _utilities

__all__ = [
    'EniPrimaryIpAddressArgs',
    'EniPrimaryIpAddressArgsDict',
    'EniPrimaryIpAddressAssociatedElasticIpArgs',
    'EniPrimaryIpAddressAssociatedElasticIpArgsDict',
    'EniPrivateIpSetArgs',
    'EniPrivateIpSetArgsDict',
    'EniPrivateIpSetAssociatedElasticIpArgs',
    'EniPrivateIpSetAssociatedElasticIpArgsDict',
    'EniTagArgs',
    'EniTagArgsDict',
    'SecurityGroupEgressPermissionArgs',
    'SecurityGroupEgressPermissionArgsDict',
    'SecurityGroupIngressPermissionArgs',
    'SecurityGroupIngressPermissionArgsDict',
    'SecurityGroupTagArgs',
    'SecurityGroupTagArgsDict',
    'SubnetRouteTableArgs',
    'SubnetRouteTableArgsDict',
    'SubnetTagArgs',
    'SubnetTagArgsDict',
    'VpcAssociateCenArgs',
    'VpcAssociateCenArgsDict',
    'VpcTagArgs',
    'VpcTagArgsDict',
]

MYPY = False

if not MYPY:
    class EniPrimaryIpAddressArgsDict(TypedDict):
        associated_elastic_ip: NotRequired[pulumi.Input['EniPrimaryIpAddressAssociatedElasticIpArgsDict']]
        """
        网卡主私网IPv4关联的公网IP的信息。
        """
        primary: NotRequired[pulumi.Input[builtins.bool]]
        """
        是否为主私网IPv4地址。
        """
        private_ip_address: NotRequired[pulumi.Input[builtins.str]]
        """
        网卡的私网IP地址。
        """
elif False:
    EniPrimaryIpAddressArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class EniPrimaryIpAddressArgs:
    def __init__(__self__, *,
                 associated_elastic_ip: Optional[pulumi.Input['EniPrimaryIpAddressAssociatedElasticIpArgs']] = None,
                 primary: Optional[pulumi.Input[builtins.bool]] = None,
                 private_ip_address: Optional[pulumi.Input[builtins.str]] = None):
        """
        :param pulumi.Input['EniPrimaryIpAddressAssociatedElasticIpArgs'] associated_elastic_ip: 网卡主私网IPv4关联的公网IP的信息。
        :param pulumi.Input[builtins.bool] primary: 是否为主私网IPv4地址。
        :param pulumi.Input[builtins.str] private_ip_address: 网卡的私网IP地址。
        """
        if associated_elastic_ip is not None:
            pulumi.set(__self__, "associated_elastic_ip", associated_elastic_ip)
        if primary is not None:
            pulumi.set(__self__, "primary", primary)
        if private_ip_address is not None:
            pulumi.set(__self__, "private_ip_address", private_ip_address)

    @property
    @pulumi.getter(name="associatedElasticIp")
    def associated_elastic_ip(self) -> Optional[pulumi.Input['EniPrimaryIpAddressAssociatedElasticIpArgs']]:
        """
        网卡主私网IPv4关联的公网IP的信息。
        """
        return pulumi.get(self, "associated_elastic_ip")

    @associated_elastic_ip.setter
    def associated_elastic_ip(self, value: Optional[pulumi.Input['EniPrimaryIpAddressAssociatedElasticIpArgs']]):
        pulumi.set(self, "associated_elastic_ip", value)

    @property
    @pulumi.getter
    def primary(self) -> Optional[pulumi.Input[builtins.bool]]:
        """
        是否为主私网IPv4地址。
        """
        return pulumi.get(self, "primary")

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

    @property
    @pulumi.getter(name="privateIpAddress")
    def private_ip_address(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        网卡的私网IP地址。
        """
        return pulumi.get(self, "private_ip_address")

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


if not MYPY:
    class EniPrimaryIpAddressAssociatedElasticIpArgsDict(TypedDict):
        allocation_id: NotRequired[pulumi.Input[builtins.str]]
        """
        公网IP的ID。
        """
        eip_address: NotRequired[pulumi.Input[builtins.str]]
        """
        公网IP的地址。
        """
        release_with_instance: NotRequired[pulumi.Input[builtins.bool]]
        """
        公网IP是否随云服务器实例删除。仅主网卡的主私网IP绑定按量计费公网IP有效。开启后，当云服务器实例被系统自动回收（退订24小时后、到期回收、欠费回收）或被调用DeleteInstances接口时，公网IP随其一同释放，true：是，false：否。
        """
elif False:
    EniPrimaryIpAddressAssociatedElasticIpArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class EniPrimaryIpAddressAssociatedElasticIpArgs:
    def __init__(__self__, *,
                 allocation_id: Optional[pulumi.Input[builtins.str]] = None,
                 eip_address: Optional[pulumi.Input[builtins.str]] = None,
                 release_with_instance: Optional[pulumi.Input[builtins.bool]] = None):
        """
        :param pulumi.Input[builtins.str] allocation_id: 公网IP的ID。
        :param pulumi.Input[builtins.str] eip_address: 公网IP的地址。
        :param pulumi.Input[builtins.bool] release_with_instance: 公网IP是否随云服务器实例删除。仅主网卡的主私网IP绑定按量计费公网IP有效。开启后，当云服务器实例被系统自动回收（退订24小时后、到期回收、欠费回收）或被调用DeleteInstances接口时，公网IP随其一同释放，true：是，false：否。
        """
        if allocation_id is not None:
            pulumi.set(__self__, "allocation_id", allocation_id)
        if eip_address is not None:
            pulumi.set(__self__, "eip_address", eip_address)
        if release_with_instance is not None:
            pulumi.set(__self__, "release_with_instance", release_with_instance)

    @property
    @pulumi.getter(name="allocationId")
    def allocation_id(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        公网IP的ID。
        """
        return pulumi.get(self, "allocation_id")

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

    @property
    @pulumi.getter(name="eipAddress")
    def eip_address(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        公网IP的地址。
        """
        return pulumi.get(self, "eip_address")

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

    @property
    @pulumi.getter(name="releaseWithInstance")
    def release_with_instance(self) -> Optional[pulumi.Input[builtins.bool]]:
        """
        公网IP是否随云服务器实例删除。仅主网卡的主私网IP绑定按量计费公网IP有效。开启后，当云服务器实例被系统自动回收（退订24小时后、到期回收、欠费回收）或被调用DeleteInstances接口时，公网IP随其一同释放，true：是，false：否。
        """
        return pulumi.get(self, "release_with_instance")

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


if not MYPY:
    class EniPrivateIpSetArgsDict(TypedDict):
        associated_elastic_ip: NotRequired[pulumi.Input['EniPrivateIpSetAssociatedElasticIpArgsDict']]
        """
        网卡主私网IPv4关联的公网IP的信息。
        """
        private_ip_address: NotRequired[pulumi.Input[builtins.str]]
        """
        网卡的私网IP地址。
        """
elif False:
    EniPrivateIpSetArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class EniPrivateIpSetArgs:
    def __init__(__self__, *,
                 associated_elastic_ip: Optional[pulumi.Input['EniPrivateIpSetAssociatedElasticIpArgs']] = None,
                 private_ip_address: Optional[pulumi.Input[builtins.str]] = None):
        """
        :param pulumi.Input['EniPrivateIpSetAssociatedElasticIpArgs'] associated_elastic_ip: 网卡主私网IPv4关联的公网IP的信息。
        :param pulumi.Input[builtins.str] private_ip_address: 网卡的私网IP地址。
        """
        if associated_elastic_ip is not None:
            pulumi.set(__self__, "associated_elastic_ip", associated_elastic_ip)
        if private_ip_address is not None:
            pulumi.set(__self__, "private_ip_address", private_ip_address)

    @property
    @pulumi.getter(name="associatedElasticIp")
    def associated_elastic_ip(self) -> Optional[pulumi.Input['EniPrivateIpSetAssociatedElasticIpArgs']]:
        """
        网卡主私网IPv4关联的公网IP的信息。
        """
        return pulumi.get(self, "associated_elastic_ip")

    @associated_elastic_ip.setter
    def associated_elastic_ip(self, value: Optional[pulumi.Input['EniPrivateIpSetAssociatedElasticIpArgs']]):
        pulumi.set(self, "associated_elastic_ip", value)

    @property
    @pulumi.getter(name="privateIpAddress")
    def private_ip_address(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        网卡的私网IP地址。
        """
        return pulumi.get(self, "private_ip_address")

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


if not MYPY:
    class EniPrivateIpSetAssociatedElasticIpArgsDict(TypedDict):
        allocation_id: NotRequired[pulumi.Input[builtins.str]]
        """
        公网IP的ID。
        """
elif False:
    EniPrivateIpSetAssociatedElasticIpArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class EniPrivateIpSetAssociatedElasticIpArgs:
    def __init__(__self__, *,
                 allocation_id: Optional[pulumi.Input[builtins.str]] = None):
        """
        :param pulumi.Input[builtins.str] allocation_id: 公网IP的ID。
        """
        if allocation_id is not None:
            pulumi.set(__self__, "allocation_id", allocation_id)

    @property
    @pulumi.getter(name="allocationId")
    def allocation_id(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        公网IP的ID。
        """
        return pulumi.get(self, "allocation_id")

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


if not MYPY:
    class EniTagArgsDict(TypedDict):
        key: NotRequired[pulumi.Input[builtins.str]]
        """
        用户标签的标签键。
        """
        value: NotRequired[pulumi.Input[builtins.str]]
        """
        用户标签的标签值。
        """
elif False:
    EniTagArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class EniTagArgs:
    def __init__(__self__, *,
                 key: Optional[pulumi.Input[builtins.str]] = None,
                 value: Optional[pulumi.Input[builtins.str]] = None):
        """
        :param pulumi.Input[builtins.str] key: 用户标签的标签键。
        :param pulumi.Input[builtins.str] value: 用户标签的标签值。
        """
        if key is not None:
            pulumi.set(__self__, "key", key)
        if value is not None:
            pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def key(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        用户标签的标签键。
        """
        return pulumi.get(self, "key")

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

    @property
    @pulumi.getter
    def value(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        用户标签的标签值。
        """
        return pulumi.get(self, "value")

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


if not MYPY:
    class SecurityGroupEgressPermissionArgsDict(TypedDict):
        cidr_ip: NotRequired[pulumi.Input[builtins.str]]
        """
        源地址的IPv4 CIDR或IPv6 CIDR
        """
        description: NotRequired[pulumi.Input[builtins.str]]
        """
        安全组规则的描述信息。需要以字母、中文或数字开头。可包含英文逗号（,）、点号（.）、下划线（_）、空格（ ）、等号（=）、短横线（-）、中文逗号（，）、中文句号（。）。长度限制为1~ 255个字符。不填保持原有配置。
        """
        direction: NotRequired[pulumi.Input[builtins.str]]
        """
        安全组规则方向。ingress：入方向。egress：出方向
        """
        policy: NotRequired[pulumi.Input[builtins.str]]
        """
        访问策略。即CidrIp 、SourceGroupId 或 PrefixListId 对应的资源访问安全组内的网卡。取值如下：accept：允许；drop：拒绝。
        """
        port_end: NotRequired[pulumi.Input[builtins.int]]
        """
        端口范围结束值。1、当Protocol 传入tcp或udp时，取值范围为1~65535。2、当Protocol 传入icmp、icmpv6或all时，仅支持传入-1，表示不限制端口
        """
        port_start: NotRequired[pulumi.Input[builtins.int]]
        """
        端口范围起始值。1、当Protocol 传入tcp或udp时，取值范围为1~65535。2、当Protocol 传入icmp、icmpv6或all时，仅支持传入-1，表示不限制端口
        """
        prefix_list_id: NotRequired[pulumi.Input[builtins.str]]
        """
        前缀列表的ID
        """
        priority: NotRequired[pulumi.Input[builtins.int]]
        """
        安全组规则优先级，数字越小，代表优先级越高。取值范围：1～100。不填默认值：1
        """
        protocol: NotRequired[pulumi.Input[builtins.str]]
        """
        协议类型。tcp、udp、icmp、icmpv6、all
        """
        source_group_id: NotRequired[pulumi.Input[builtins.str]]
        """
        源地址安全组ID。即该安全组中的所有网卡的地址作为源地址。
        """
elif False:
    SecurityGroupEgressPermissionArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class SecurityGroupEgressPermissionArgs:
    def __init__(__self__, *,
                 cidr_ip: Optional[pulumi.Input[builtins.str]] = None,
                 description: Optional[pulumi.Input[builtins.str]] = None,
                 direction: Optional[pulumi.Input[builtins.str]] = None,
                 policy: Optional[pulumi.Input[builtins.str]] = None,
                 port_end: Optional[pulumi.Input[builtins.int]] = None,
                 port_start: Optional[pulumi.Input[builtins.int]] = None,
                 prefix_list_id: Optional[pulumi.Input[builtins.str]] = None,
                 priority: Optional[pulumi.Input[builtins.int]] = None,
                 protocol: Optional[pulumi.Input[builtins.str]] = None,
                 source_group_id: Optional[pulumi.Input[builtins.str]] = None):
        """
        :param pulumi.Input[builtins.str] cidr_ip: 源地址的IPv4 CIDR或IPv6 CIDR
        :param pulumi.Input[builtins.str] description: 安全组规则的描述信息。需要以字母、中文或数字开头。可包含英文逗号（,）、点号（.）、下划线（_）、空格（ ）、等号（=）、短横线（-）、中文逗号（，）、中文句号（。）。长度限制为1~ 255个字符。不填保持原有配置。
        :param pulumi.Input[builtins.str] direction: 安全组规则方向。ingress：入方向。egress：出方向
        :param pulumi.Input[builtins.str] policy: 访问策略。即CidrIp 、SourceGroupId 或 PrefixListId 对应的资源访问安全组内的网卡。取值如下：accept：允许；drop：拒绝。
        :param pulumi.Input[builtins.int] port_end: 端口范围结束值。1、当Protocol 传入tcp或udp时，取值范围为1~65535。2、当Protocol 传入icmp、icmpv6或all时，仅支持传入-1，表示不限制端口
        :param pulumi.Input[builtins.int] port_start: 端口范围起始值。1、当Protocol 传入tcp或udp时，取值范围为1~65535。2、当Protocol 传入icmp、icmpv6或all时，仅支持传入-1，表示不限制端口
        :param pulumi.Input[builtins.str] prefix_list_id: 前缀列表的ID
        :param pulumi.Input[builtins.int] priority: 安全组规则优先级，数字越小，代表优先级越高。取值范围：1～100。不填默认值：1
        :param pulumi.Input[builtins.str] protocol: 协议类型。tcp、udp、icmp、icmpv6、all
        :param pulumi.Input[builtins.str] source_group_id: 源地址安全组ID。即该安全组中的所有网卡的地址作为源地址。
        """
        if cidr_ip is not None:
            pulumi.set(__self__, "cidr_ip", cidr_ip)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if direction is not None:
            pulumi.set(__self__, "direction", direction)
        if policy is not None:
            pulumi.set(__self__, "policy", policy)
        if port_end is not None:
            pulumi.set(__self__, "port_end", port_end)
        if port_start is not None:
            pulumi.set(__self__, "port_start", port_start)
        if prefix_list_id is not None:
            pulumi.set(__self__, "prefix_list_id", prefix_list_id)
        if priority is not None:
            pulumi.set(__self__, "priority", priority)
        if protocol is not None:
            pulumi.set(__self__, "protocol", protocol)
        if source_group_id is not None:
            pulumi.set(__self__, "source_group_id", source_group_id)

    @property
    @pulumi.getter(name="cidrIp")
    def cidr_ip(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        源地址的IPv4 CIDR或IPv6 CIDR
        """
        return pulumi.get(self, "cidr_ip")

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

    @property
    @pulumi.getter
    def description(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        安全组规则的描述信息。需要以字母、中文或数字开头。可包含英文逗号（,）、点号（.）、下划线（_）、空格（ ）、等号（=）、短横线（-）、中文逗号（，）、中文句号（。）。长度限制为1~ 255个字符。不填保持原有配置。
        """
        return pulumi.get(self, "description")

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

    @property
    @pulumi.getter
    def direction(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        安全组规则方向。ingress：入方向。egress：出方向
        """
        return pulumi.get(self, "direction")

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

    @property
    @pulumi.getter
    def policy(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        访问策略。即CidrIp 、SourceGroupId 或 PrefixListId 对应的资源访问安全组内的网卡。取值如下：accept：允许；drop：拒绝。
        """
        return pulumi.get(self, "policy")

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

    @property
    @pulumi.getter(name="portEnd")
    def port_end(self) -> Optional[pulumi.Input[builtins.int]]:
        """
        端口范围结束值。1、当Protocol 传入tcp或udp时，取值范围为1~65535。2、当Protocol 传入icmp、icmpv6或all时，仅支持传入-1，表示不限制端口
        """
        return pulumi.get(self, "port_end")

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

    @property
    @pulumi.getter(name="portStart")
    def port_start(self) -> Optional[pulumi.Input[builtins.int]]:
        """
        端口范围起始值。1、当Protocol 传入tcp或udp时，取值范围为1~65535。2、当Protocol 传入icmp、icmpv6或all时，仅支持传入-1，表示不限制端口
        """
        return pulumi.get(self, "port_start")

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

    @property
    @pulumi.getter(name="prefixListId")
    def prefix_list_id(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        前缀列表的ID
        """
        return pulumi.get(self, "prefix_list_id")

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

    @property
    @pulumi.getter
    def priority(self) -> Optional[pulumi.Input[builtins.int]]:
        """
        安全组规则优先级，数字越小，代表优先级越高。取值范围：1～100。不填默认值：1
        """
        return pulumi.get(self, "priority")

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

    @property
    @pulumi.getter
    def protocol(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        协议类型。tcp、udp、icmp、icmpv6、all
        """
        return pulumi.get(self, "protocol")

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

    @property
    @pulumi.getter(name="sourceGroupId")
    def source_group_id(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        源地址安全组ID。即该安全组中的所有网卡的地址作为源地址。
        """
        return pulumi.get(self, "source_group_id")

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


if not MYPY:
    class SecurityGroupIngressPermissionArgsDict(TypedDict):
        cidr_ip: NotRequired[pulumi.Input[builtins.str]]
        """
        源地址的IPv4 CIDR或IPv6 CIDR
        """
        description: NotRequired[pulumi.Input[builtins.str]]
        """
        安全组规则的描述信息。需要以字母、中文或数字开头。可包含英文逗号（,）、点号（.）、下划线（_）、空格（ ）、等号（=）、短横线（-）、中文逗号（，）、中文句号（。）。长度限制为1~ 255个字符。不填保持原有配置。
        """
        direction: NotRequired[pulumi.Input[builtins.str]]
        """
        安全组规则方向。ingress：入方向。egress：出方向
        """
        policy: NotRequired[pulumi.Input[builtins.str]]
        """
        访问策略。即CidrIp 、SourceGroupId 或 PrefixListId 对应的资源访问安全组内的网卡。取值如下：accept：允许；drop：拒绝。
        """
        port_end: NotRequired[pulumi.Input[builtins.int]]
        """
        端口范围结束值。1、当Protocol 传入tcp或udp时，取值范围为1~65535。2、当Protocol 传入icmp、icmpv6或all时，仅支持传入-1，表示不限制端口
        """
        port_start: NotRequired[pulumi.Input[builtins.int]]
        """
        端口范围起始值。1、当Protocol 传入tcp或udp时，取值范围为1~65535。2、当Protocol 传入icmp、icmpv6或all时，仅支持传入-1，表示不限制端口
        """
        prefix_list_id: NotRequired[pulumi.Input[builtins.str]]
        """
        前缀列表的ID
        """
        priority: NotRequired[pulumi.Input[builtins.int]]
        """
        安全组规则优先级，数字越小，代表优先级越高。取值范围：1～100。不填默认值：1
        """
        protocol: NotRequired[pulumi.Input[builtins.str]]
        """
        协议类型。tcp、udp、icmp、icmpv6、all
        """
        source_group_id: NotRequired[pulumi.Input[builtins.str]]
        """
        源地址安全组ID。即该安全组中的所有网卡的地址作为源地址。
        """
elif False:
    SecurityGroupIngressPermissionArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class SecurityGroupIngressPermissionArgs:
    def __init__(__self__, *,
                 cidr_ip: Optional[pulumi.Input[builtins.str]] = None,
                 description: Optional[pulumi.Input[builtins.str]] = None,
                 direction: Optional[pulumi.Input[builtins.str]] = None,
                 policy: Optional[pulumi.Input[builtins.str]] = None,
                 port_end: Optional[pulumi.Input[builtins.int]] = None,
                 port_start: Optional[pulumi.Input[builtins.int]] = None,
                 prefix_list_id: Optional[pulumi.Input[builtins.str]] = None,
                 priority: Optional[pulumi.Input[builtins.int]] = None,
                 protocol: Optional[pulumi.Input[builtins.str]] = None,
                 source_group_id: Optional[pulumi.Input[builtins.str]] = None):
        """
        :param pulumi.Input[builtins.str] cidr_ip: 源地址的IPv4 CIDR或IPv6 CIDR
        :param pulumi.Input[builtins.str] description: 安全组规则的描述信息。需要以字母、中文或数字开头。可包含英文逗号（,）、点号（.）、下划线（_）、空格（ ）、等号（=）、短横线（-）、中文逗号（，）、中文句号（。）。长度限制为1~ 255个字符。不填保持原有配置。
        :param pulumi.Input[builtins.str] direction: 安全组规则方向。ingress：入方向。egress：出方向
        :param pulumi.Input[builtins.str] policy: 访问策略。即CidrIp 、SourceGroupId 或 PrefixListId 对应的资源访问安全组内的网卡。取值如下：accept：允许；drop：拒绝。
        :param pulumi.Input[builtins.int] port_end: 端口范围结束值。1、当Protocol 传入tcp或udp时，取值范围为1~65535。2、当Protocol 传入icmp、icmpv6或all时，仅支持传入-1，表示不限制端口
        :param pulumi.Input[builtins.int] port_start: 端口范围起始值。1、当Protocol 传入tcp或udp时，取值范围为1~65535。2、当Protocol 传入icmp、icmpv6或all时，仅支持传入-1，表示不限制端口
        :param pulumi.Input[builtins.str] prefix_list_id: 前缀列表的ID
        :param pulumi.Input[builtins.int] priority: 安全组规则优先级，数字越小，代表优先级越高。取值范围：1～100。不填默认值：1
        :param pulumi.Input[builtins.str] protocol: 协议类型。tcp、udp、icmp、icmpv6、all
        :param pulumi.Input[builtins.str] source_group_id: 源地址安全组ID。即该安全组中的所有网卡的地址作为源地址。
        """
        if cidr_ip is not None:
            pulumi.set(__self__, "cidr_ip", cidr_ip)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if direction is not None:
            pulumi.set(__self__, "direction", direction)
        if policy is not None:
            pulumi.set(__self__, "policy", policy)
        if port_end is not None:
            pulumi.set(__self__, "port_end", port_end)
        if port_start is not None:
            pulumi.set(__self__, "port_start", port_start)
        if prefix_list_id is not None:
            pulumi.set(__self__, "prefix_list_id", prefix_list_id)
        if priority is not None:
            pulumi.set(__self__, "priority", priority)
        if protocol is not None:
            pulumi.set(__self__, "protocol", protocol)
        if source_group_id is not None:
            pulumi.set(__self__, "source_group_id", source_group_id)

    @property
    @pulumi.getter(name="cidrIp")
    def cidr_ip(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        源地址的IPv4 CIDR或IPv6 CIDR
        """
        return pulumi.get(self, "cidr_ip")

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

    @property
    @pulumi.getter
    def description(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        安全组规则的描述信息。需要以字母、中文或数字开头。可包含英文逗号（,）、点号（.）、下划线（_）、空格（ ）、等号（=）、短横线（-）、中文逗号（，）、中文句号（。）。长度限制为1~ 255个字符。不填保持原有配置。
        """
        return pulumi.get(self, "description")

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

    @property
    @pulumi.getter
    def direction(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        安全组规则方向。ingress：入方向。egress：出方向
        """
        return pulumi.get(self, "direction")

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

    @property
    @pulumi.getter
    def policy(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        访问策略。即CidrIp 、SourceGroupId 或 PrefixListId 对应的资源访问安全组内的网卡。取值如下：accept：允许；drop：拒绝。
        """
        return pulumi.get(self, "policy")

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

    @property
    @pulumi.getter(name="portEnd")
    def port_end(self) -> Optional[pulumi.Input[builtins.int]]:
        """
        端口范围结束值。1、当Protocol 传入tcp或udp时，取值范围为1~65535。2、当Protocol 传入icmp、icmpv6或all时，仅支持传入-1，表示不限制端口
        """
        return pulumi.get(self, "port_end")

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

    @property
    @pulumi.getter(name="portStart")
    def port_start(self) -> Optional[pulumi.Input[builtins.int]]:
        """
        端口范围起始值。1、当Protocol 传入tcp或udp时，取值范围为1~65535。2、当Protocol 传入icmp、icmpv6或all时，仅支持传入-1，表示不限制端口
        """
        return pulumi.get(self, "port_start")

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

    @property
    @pulumi.getter(name="prefixListId")
    def prefix_list_id(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        前缀列表的ID
        """
        return pulumi.get(self, "prefix_list_id")

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

    @property
    @pulumi.getter
    def priority(self) -> Optional[pulumi.Input[builtins.int]]:
        """
        安全组规则优先级，数字越小，代表优先级越高。取值范围：1～100。不填默认值：1
        """
        return pulumi.get(self, "priority")

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

    @property
    @pulumi.getter
    def protocol(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        协议类型。tcp、udp、icmp、icmpv6、all
        """
        return pulumi.get(self, "protocol")

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

    @property
    @pulumi.getter(name="sourceGroupId")
    def source_group_id(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        源地址安全组ID。即该安全组中的所有网卡的地址作为源地址。
        """
        return pulumi.get(self, "source_group_id")

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


if not MYPY:
    class SecurityGroupTagArgsDict(TypedDict):
        key: NotRequired[pulumi.Input[builtins.str]]
        """
        用户标签的标签键。
        """
        value: NotRequired[pulumi.Input[builtins.str]]
        """
        用户标签的标签值。
        """
elif False:
    SecurityGroupTagArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class SecurityGroupTagArgs:
    def __init__(__self__, *,
                 key: Optional[pulumi.Input[builtins.str]] = None,
                 value: Optional[pulumi.Input[builtins.str]] = None):
        """
        :param pulumi.Input[builtins.str] key: 用户标签的标签键。
        :param pulumi.Input[builtins.str] value: 用户标签的标签值。
        """
        if key is not None:
            pulumi.set(__self__, "key", key)
        if value is not None:
            pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def key(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        用户标签的标签键。
        """
        return pulumi.get(self, "key")

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

    @property
    @pulumi.getter
    def value(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        用户标签的标签值。
        """
        return pulumi.get(self, "value")

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


if not MYPY:
    class SubnetRouteTableArgsDict(TypedDict):
        route_table_id: NotRequired[pulumi.Input[builtins.str]]
        """
        子网关联的路由表ID。
        """
        route_table_type: NotRequired[pulumi.Input[builtins.str]]
        """
        子网关联的路由表的类型。1、System：表示系统路由表。2、Custom：表示自定义路由表。
        """
elif False:
    SubnetRouteTableArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class SubnetRouteTableArgs:
    def __init__(__self__, *,
                 route_table_id: Optional[pulumi.Input[builtins.str]] = None,
                 route_table_type: Optional[pulumi.Input[builtins.str]] = None):
        """
        :param pulumi.Input[builtins.str] route_table_id: 子网关联的路由表ID。
        :param pulumi.Input[builtins.str] route_table_type: 子网关联的路由表的类型。1、System：表示系统路由表。2、Custom：表示自定义路由表。
        """
        if route_table_id is not None:
            pulumi.set(__self__, "route_table_id", route_table_id)
        if route_table_type is not None:
            pulumi.set(__self__, "route_table_type", route_table_type)

    @property
    @pulumi.getter(name="routeTableId")
    def route_table_id(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        子网关联的路由表ID。
        """
        return pulumi.get(self, "route_table_id")

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

    @property
    @pulumi.getter(name="routeTableType")
    def route_table_type(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        子网关联的路由表的类型。1、System：表示系统路由表。2、Custom：表示自定义路由表。
        """
        return pulumi.get(self, "route_table_type")

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


if not MYPY:
    class SubnetTagArgsDict(TypedDict):
        key: NotRequired[pulumi.Input[builtins.str]]
        """
        用户标签的标签键。
        """
        value: NotRequired[pulumi.Input[builtins.str]]
        """
        用户标签的标签值。
        """
elif False:
    SubnetTagArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class SubnetTagArgs:
    def __init__(__self__, *,
                 key: Optional[pulumi.Input[builtins.str]] = None,
                 value: Optional[pulumi.Input[builtins.str]] = None):
        """
        :param pulumi.Input[builtins.str] key: 用户标签的标签键。
        :param pulumi.Input[builtins.str] value: 用户标签的标签值。
        """
        if key is not None:
            pulumi.set(__self__, "key", key)
        if value is not None:
            pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def key(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        用户标签的标签键。
        """
        return pulumi.get(self, "key")

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

    @property
    @pulumi.getter
    def value(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        用户标签的标签值。
        """
        return pulumi.get(self, "value")

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


if not MYPY:
    class VpcAssociateCenArgsDict(TypedDict):
        cen_id: NotRequired[pulumi.Input[builtins.str]]
        """
        CEN的ID。
        """
        cen_owner_id: NotRequired[pulumi.Input[builtins.str]]
        """
        CEN的用户ID。
        """
        cen_status: NotRequired[pulumi.Input[builtins.str]]
        """
        VPC在CEN中的状态。Attaching：加载中，Attached：已加载
        """
elif False:
    VpcAssociateCenArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class VpcAssociateCenArgs:
    def __init__(__self__, *,
                 cen_id: Optional[pulumi.Input[builtins.str]] = None,
                 cen_owner_id: Optional[pulumi.Input[builtins.str]] = None,
                 cen_status: Optional[pulumi.Input[builtins.str]] = None):
        """
        :param pulumi.Input[builtins.str] cen_id: CEN的ID。
        :param pulumi.Input[builtins.str] cen_owner_id: CEN的用户ID。
        :param pulumi.Input[builtins.str] cen_status: VPC在CEN中的状态。Attaching：加载中，Attached：已加载
        """
        if cen_id is not None:
            pulumi.set(__self__, "cen_id", cen_id)
        if cen_owner_id is not None:
            pulumi.set(__self__, "cen_owner_id", cen_owner_id)
        if cen_status is not None:
            pulumi.set(__self__, "cen_status", cen_status)

    @property
    @pulumi.getter(name="cenId")
    def cen_id(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        CEN的ID。
        """
        return pulumi.get(self, "cen_id")

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

    @property
    @pulumi.getter(name="cenOwnerId")
    def cen_owner_id(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        CEN的用户ID。
        """
        return pulumi.get(self, "cen_owner_id")

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

    @property
    @pulumi.getter(name="cenStatus")
    def cen_status(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        VPC在CEN中的状态。Attaching：加载中，Attached：已加载
        """
        return pulumi.get(self, "cen_status")

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


if not MYPY:
    class VpcTagArgsDict(TypedDict):
        key: NotRequired[pulumi.Input[builtins.str]]
        """
        标签键。
        """
        value: NotRequired[pulumi.Input[builtins.str]]
        """
        标签值。
        """
elif False:
    VpcTagArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class VpcTagArgs:
    def __init__(__self__, *,
                 key: Optional[pulumi.Input[builtins.str]] = None,
                 value: Optional[pulumi.Input[builtins.str]] = None):
        """
        :param pulumi.Input[builtins.str] key: 标签键。
        :param pulumi.Input[builtins.str] value: 标签值。
        """
        if key is not None:
            pulumi.set(__self__, "key", key)
        if value is not None:
            pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def key(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        标签键。
        """
        return pulumi.get(self, "key")

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

    @property
    @pulumi.getter
    def value(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        标签值。
        """
        return pulumi.get(self, "value")

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


