# -*- coding: utf-8 -*-
#---------------------------------------------------------------------------
# Copyright 2021 VMware, Inc.  All rights reserved.

# AUTO GENERATED FILE -- DO NOT MODIFY!
#
# vAPI stub file for package com.vmware.nsx_policy.model.
#---------------------------------------------------------------------------

"""


"""

__author__ = 'VMware, Inc.'
__docformat__ = 'restructuredtext en'

import sys

from vmware.vapi.bindings import type
from vmware.vapi.bindings.converter import TypeConverter
from vmware.vapi.bindings.enum import Enum
from vmware.vapi.bindings.error import VapiError
from vmware.vapi.bindings.struct import VapiStruct
from vmware.vapi.bindings.stub import (
    ApiInterfaceStub, StubFactoryBase, VapiInterface)
from vmware.vapi.bindings.common import raise_core_exception
from vmware.vapi.data.validator import (UnionValidator, HasFieldsOfValidator)
from vmware.vapi.exception import CoreException
from vmware.vapi.lib.constants import TaskType
from vmware.vapi.lib.rest import OperationRestMetadata


class ALGTypeServiceEntry(VapiStruct):
    """
    An ServiceEntry that represents an ALG protocol

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ALGTypeServiceEntry"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    ALG_ORACLE_TNS = "ORACLE_TNS"
    """


    """
    ALG_FTP = "FTP"
    """


    """
    ALG_SUN_RPC_TCP = "SUN_RPC_TCP"
    """


    """
    ALG_SUN_RPC_UDP = "SUN_RPC_UDP"
    """


    """
    ALG_MS_RPC_TCP = "MS_RPC_TCP"
    """


    """
    ALG_MS_RPC_UDP = "MS_RPC_UDP"
    """


    """
    ALG_NBNS_BROADCAST = "NBNS_BROADCAST"
    """


    """
    ALG_NBDG_BROADCAST = "NBDG_BROADCAST"
    """


    """
    ALG_TFTP = "TFTP"
    """


    """



    _canonical_to_pep_names = {
                            'alg': 'alg',
                            'destination_ports': 'destination_ports',
                            'source_ports': 'source_ports',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            }

    def __init__(self,
                 alg=None,
                 destination_ports=None,
                 source_ports=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ALGTypeServiceEntry',
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                ):
        """
        :type  alg: :class:`str` or ``None``
        :param alg: Possible values are: 
            
            * :attr:`ALGTypeServiceEntry.ALG_ORACLE_TNS`
            * :attr:`ALGTypeServiceEntry.ALG_FTP`
            * :attr:`ALGTypeServiceEntry.ALG_SUN_RPC_TCP`
            * :attr:`ALGTypeServiceEntry.ALG_SUN_RPC_UDP`
            * :attr:`ALGTypeServiceEntry.ALG_MS_RPC_TCP`
            * :attr:`ALGTypeServiceEntry.ALG_MS_RPC_UDP`
            * :attr:`ALGTypeServiceEntry.ALG_NBNS_BROADCAST`
            * :attr:`ALGTypeServiceEntry.ALG_NBDG_BROADCAST`
            * :attr:`ALGTypeServiceEntry.ALG_TFTP`
            
            The Application Layer Gateway (ALG) protocol. Please note, protocol
            NBNS_BROADCAST and NBDG_BROADCAST are deprecated. Please use UDP
            protocol and create L4 Port Set type of service instead.
        :type  destination_ports: :class:`list` of :class:`str` or ``None``
        :param destination_ports: The destination_port cannot be empty and must be a single value.
            format: port-or-range
        :type  source_ports: :class:`list` of :class:`str` or ``None``
        :param source_ports: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`ServiceEntry.RESOURCE_TYPE_IPPROTOCOLSERVICEENTRY`
            * :attr:`ServiceEntry.RESOURCE_TYPE_IGMPTYPESERVICEENTRY`
            * :attr:`ServiceEntry.RESOURCE_TYPE_ICMPTYPESERVICEENTRY`
            * :attr:`ServiceEntry.RESOURCE_TYPE_ALGTYPESERVICEENTRY`
            * :attr:`ServiceEntry.RESOURCE_TYPE_L4PORTSETSERVICEENTRY`
            * :attr:`ServiceEntry.RESOURCE_TYPE_ETHERTYPESERVICEENTRY`
            * :attr:`ServiceEntry.RESOURCE_TYPE_NESTEDSERVICESERVICEENTRY`
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.alg = alg
        self.destination_ports = destination_ports
        self.source_ports = source_ports
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ALGTypeServiceEntry._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ALG_type_service_entry', {
        'alg': type.OptionalType(type.StringType()),
        'destination_ports': type.OptionalType(type.ListType(type.StringType())),
        'source_ports': type.OptionalType(type.ListType(type.StringType())),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
    },
    ALGTypeServiceEntry,
    False,
    None))



class AbstractSpace(VapiStruct):
    """
    Represents the space in which the policy is being defined.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    CONNECTIVITY_STRATEGY_WHITELIST = "WHITELIST"
    """


    """
    CONNECTIVITY_STRATEGY_BLACKLIST = "BLACKLIST"
    """


    """
    CONNECTIVITY_STRATEGY_WHITELIST_ENABLE_LOGGING = "WHITELIST_ENABLE_LOGGING"
    """


    """
    CONNECTIVITY_STRATEGY_BLACKLIST_ENABLE_LOGGING = "BLACKLIST_ENABLE_LOGGING"
    """


    """
    CONNECTIVITY_STRATEGY_NONE = "NONE"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'connectivity_strategy': 'connectivity_strategy',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 connectivity_strategy=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  connectivity_strategy: :class:`str` or ``None``
        :param connectivity_strategy: Possible values are: 
            
            * :attr:`AbstractSpace.CONNECTIVITY_STRATEGY_WHITELIST`
            * :attr:`AbstractSpace.CONNECTIVITY_STRATEGY_BLACKLIST`
            *
              :attr:`AbstractSpace.CONNECTIVITY_STRATEGY_WHITELIST_ENABLE_LOGGING`
            *
              :attr:`AbstractSpace.CONNECTIVITY_STRATEGY_BLACKLIST_ENABLE_LOGGING`
            * :attr:`AbstractSpace.CONNECTIVITY_STRATEGY_NONE`
            
            The connectivity strategy is deprecated. Use default layer3 rule,
            /infra/domains/default/security-policies/default-layer3-security-policy/rules/default-layer3-rule.
            This field indicates the default connectivity policy for the infra
            or tenant space WHITELIST - Adds a default drop rule. Administrator
            can then use \"allow\" rules (aka whitelist) to allow traffic
            between groups BLACKLIST - Adds a default allow rule. Admin can
            then use \"drop\" rules (aka blacklist) to block traffic between
            groups WHITELIST_ENABLE_LOGGING - Whitelising with logging enabled
            BLACKLIST_ENABLE_LOGGING - Blacklisting with logging enabled NONE -
            No default rules are added.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.connectivity_strategy = connectivity_strategy
        VapiStruct.__init__(self)


AbstractSpace._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.abstract_space', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'connectivity_strategy': type.OptionalType(type.StringType()),
    },
    AbstractSpace,
    False,
    None))



class AcceptableComponentVersion(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    COMPONENT_TYPE_HOST = "HOST"
    """


    """
    COMPONENT_TYPE_EDGE = "EDGE"
    """


    """
    COMPONENT_TYPE_CCP = "CCP"
    """


    """
    COMPONENT_TYPE_MP = "MP"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'acceptable_versions': 'acceptable_versions',
                            'component_type': 'component_type',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 acceptable_versions=None,
                 component_type=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  acceptable_versions: :class:`list` of :class:`str` or ``None``
        :param acceptable_versions: List of component versions
        :type  component_type: :class:`str` or ``None``
        :param component_type: Possible values are: 
            
            * :attr:`AcceptableComponentVersion.COMPONENT_TYPE_HOST`
            * :attr:`AcceptableComponentVersion.COMPONENT_TYPE_EDGE`
            * :attr:`AcceptableComponentVersion.COMPONENT_TYPE_CCP`
            * :attr:`AcceptableComponentVersion.COMPONENT_TYPE_MP`
            
             Node type
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.acceptable_versions = acceptable_versions
        self.component_type = component_type
        VapiStruct.__init__(self)


AcceptableComponentVersion._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.acceptable_component_version', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'acceptable_versions': type.OptionalType(type.ListType(type.StringType())),
        'component_type': type.OptionalType(type.StringType()),
    },
    AcceptableComponentVersion,
    False,
    None))



class AcceptableComponentVersionList(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'results': 'results',
                            }

    def __init__(self,
                 results=None,
                ):
        """
        :type  results: :class:`list` of :class:`AcceptableComponentVersion` or ``None``
        :param results: Acceptable version whitelist for different components
        """
        self.results = results
        VapiStruct.__init__(self)


AcceptableComponentVersionList._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.acceptable_component_version_list', {
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'AcceptableComponentVersion'))),
    },
    AcceptableComponentVersionList,
    False,
    None))



class Action(VapiStruct):
    """
    Reaction Action is the action to take when the stipulated criteria
    specified in the event exist over the source. Some example actions include:
    - Notify Admin (or VMC's SRE) via email. - Populate a specific label with
    the IPSec VPN Session. - Remove the IPSec VPN Session from a specific
    label.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "Action"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    RESOURCE_TYPE_PATCHRESOURCES = "PatchResources"
    """


    """
    RESOURCE_TYPE_SETFIELDS = "SetFields"
    """


    """



    _canonical_to_pep_names = {
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 resource_type='Action',
                ):
        """
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`Action.RESOURCE_TYPE_PATCHRESOURCES`
            * :attr:`Action.RESOURCE_TYPE_SETFIELDS`
            
             Reaction Action resource type.
        """
        self._resource_type = resource_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

Action._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.action', {
        'resource_type': type.StringType(),
    },
    Action,
    False,
    None))



class ActionableResource(VapiStruct):
    """
    Resources managed during restore process

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'ip_address': 'ip_address',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 ip_address=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  ip_address: :class:`str` or ``None``
        :param ip_address: A resource reference on which actions can be performed format:
            hostname-or-ip
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.ip_address = ip_address
        VapiStruct.__init__(self)


ActionableResource._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.actionable_resource', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'ip_address': type.OptionalType(type.StringType()),
    },
    ActionableResource,
    False,
    None))



class ActionableResourceListResult(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`ActionableResource` or ``None``
        :param results: List results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


ActionableResourceListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.actionable_resource_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ActionableResource'))),
    },
    ActionableResourceListResult,
    False,
    None))



class ActiveDirectoryIdentitySource(VapiStruct):
    """
    An identity source service that runs Microsoft Active Directory. The
    service allows selected user accounts defined in Active Directory to log
    into and access NSX-T.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ActiveDirectoryIdentitySource"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'alternative_domain_names': 'alternative_domain_names',
                            'base_dn': 'base_dn',
                            'domain_name': 'domain_name',
                            'ldap_servers': 'ldap_servers',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ActiveDirectoryIdentitySource',
                 tags=None,
                 alternative_domain_names=None,
                 base_dn=None,
                 domain_name=None,
                 ldap_servers=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`LdapIdentitySource.RESOURCE_TYPE_ACTIVEDIRECTORYIDENTITYSOURCE`
            * :attr:`LdapIdentitySource.RESOURCE_TYPE_OPENLDAPIDENTITYSOURCE`
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  alternative_domain_names: :class:`list` of :class:`str` or ``None``
        :param alternative_domain_names: After parsing the \"user\\\\@domain\", the domain portion is used
            to select the LDAP identity source to use. Additional domains
            listed here will also be directed to this LDAP identity source. In
            Active Directory these are sometimes referred to as Alternative UPN
            Suffixes.
        :type  base_dn: :class:`str` or ``None``
        :param base_dn: The subtree of the LDAP identity source to search when locating
            users and groups.
        :type  domain_name: :class:`str` or ``None``
        :param domain_name: The name of the authentication domain. When users log into NSX
            using an identity of the form \"user\\\\@domain\", NSX uses the
            domain portion to determine which LDAP identity source to use.
        :type  ldap_servers: :class:`list` of :class:`IdentitySourceLdapServer` or ``None``
        :param ldap_servers: The list of LDAP servers that provide LDAP service for this
            identity source. Currently, only one LDAP server is supported.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.alternative_domain_names = alternative_domain_names
        self.base_dn = base_dn
        self.domain_name = domain_name
        self.ldap_servers = ldap_servers
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ActiveDirectoryIdentitySource._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.active_directory_identity_source', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'alternative_domain_names': type.OptionalType(type.ListType(type.StringType())),
        'base_dn': type.OptionalType(type.StringType()),
        'domain_name': type.OptionalType(type.StringType()),
        'ldap_servers': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'IdentitySourceLdapServer'))),
    },
    ActiveDirectoryIdentitySource,
    False,
    None))



class AdvanceClusterRestoreInput(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'id': 'id',
                            'resources': 'resources',
                            }

    def __init__(self,
                 id=None,
                 resources=None,
                ):
        """
        :type  id: :class:`str` or ``None``
        :param id: Unique id of an instruction (as returned by the GET /restore/status
            call) for which input is to be provided
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  resources: :class:`list` of :class:`SelectableResourceReference` or ``None``
        :param resources: List of resources for which the instruction is applicable.
        """
        self.id = id
        self.resources = resources
        VapiStruct.__init__(self)


AdvanceClusterRestoreInput._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.advance_cluster_restore_input', {
        'id': type.OptionalType(type.StringType()),
        'resources': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'SelectableResourceReference'))),
    },
    AdvanceClusterRestoreInput,
    False,
    None))



class AdvanceClusterRestoreRequest(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'data': 'data',
                            }

    def __init__(self,
                 data=None,
                ):
        """
        :type  data: :class:`list` of :class:`AdvanceClusterRestoreInput` or ``None``
        :param data: List of instructions and their associated data
        """
        self.data = data
        VapiStruct.__init__(self)


AdvanceClusterRestoreRequest._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.advance_cluster_restore_request', {
        'data': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'AdvanceClusterRestoreInput'))),
    },
    AdvanceClusterRestoreRequest,
    False,
    None))



class AggregateDNSForwarderStatistics(VapiStruct):
    """
    Aggregate of DNS forwarder statistics across enforcement points.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'intent_path': 'intent_path',
                            'statistics_per_enforcement_point': 'statistics_per_enforcement_point',
                            }

    def __init__(self,
                 intent_path=None,
                 statistics_per_enforcement_point=None,
                ):
        """
        :type  intent_path: :class:`str` or ``None``
        :param intent_path: String path of the DNS forwarder intent.
        :type  statistics_per_enforcement_point: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param statistics_per_enforcement_point: List of DNS forwarder statistics per enforcement point.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`DNSForwarderStatisticsPerEnforcementPoint`. When methods
            return a value of this class as a return value, the attribute will
            contain all the attributes defined in
            :class:`DNSForwarderStatisticsPerEnforcementPoint`.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.intent_path = intent_path
        self.statistics_per_enforcement_point = statistics_per_enforcement_point
        VapiStruct.__init__(self)


AggregateDNSForwarderStatistics._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.aggregate_DNS_forwarder_statistics', {
        'intent_path': type.OptionalType(type.StringType()),
        'statistics_per_enforcement_point': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'DNSForwarderStatisticsPerEnforcementPoint')]))),
    },
    AggregateDNSForwarderStatistics,
    False,
    None))



class AggregateDNSForwarderStatus(VapiStruct):
    """
    Aggregate of DNS forwarder status across enforcement points.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'intent_path': 'intent_path',
                            'status_per_enforcement_point': 'status_per_enforcement_point',
                            }

    def __init__(self,
                 intent_path=None,
                 status_per_enforcement_point=None,
                ):
        """
        :type  intent_path: :class:`str` or ``None``
        :param intent_path: String path of the DNS forwarder intent.
        :type  status_per_enforcement_point: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param status_per_enforcement_point: List of DNS forwarder status per enforcement point.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`DNSForwarderStatusPerEnforcementPoint`. When methods return
            a value of this class as a return value, the attribute will contain
            all the attributes defined in
            :class:`DNSForwarderStatusPerEnforcementPoint`.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.intent_path = intent_path
        self.status_per_enforcement_point = status_per_enforcement_point
        VapiStruct.__init__(self)


AggregateDNSForwarderStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.aggregate_DNS_forwarder_status', {
        'intent_path': type.OptionalType(type.StringType()),
        'status_per_enforcement_point': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'DNSForwarderStatusPerEnforcementPoint')]))),
    },
    AggregateDNSForwarderStatus,
    False,
    None))



class AggregateIPSecVpnSessionStatistics(VapiStruct):
    """
    Aggregate of IPSec VPN Session Statistics across Enforcement Points.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'intent_path': 'intent_path',
                            'results': 'results',
                            }

    def __init__(self,
                 intent_path=None,
                 results=None,
                ):
        """
        :type  intent_path: :class:`str` or ``None``
        :param intent_path: Intent path of object, forward slashes must be escaped using %2F.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param results: List of IPSec VPN Session Statistics per Enforcement Point.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`IPSecVpnSessionStatisticsPerEP`. When methods return a
            value of this class as a return value, the attribute will contain
            all the attributes defined in
            :class:`IPSecVpnSessionStatisticsPerEP`.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.intent_path = intent_path
        self.results = results
        VapiStruct.__init__(self)


AggregateIPSecVpnSessionStatistics._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.aggregate_IP_sec_vpn_session_statistics', {
        'intent_path': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'IPSecVpnSessionStatisticsPerEP')]))),
    },
    AggregateIPSecVpnSessionStatistics,
    False,
    None))



class AggregateIPSecVpnSessionStatus(VapiStruct):
    """
    Aggregate of IPSec VPN Session Status across Enforcement Points.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'intent_path': 'intent_path',
                            'results': 'results',
                            }

    def __init__(self,
                 intent_path=None,
                 results=None,
                ):
        """
        :type  intent_path: :class:`str` or ``None``
        :param intent_path: Intent path of object, forward slashes must be escaped using %2F.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param results: List of IPSec VPN Session Status per Enforcement Point.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`IPSecVpnSessionStatusPerEP`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`IPSecVpnSessionStatusPerEP`.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.intent_path = intent_path
        self.results = results
        VapiStruct.__init__(self)


AggregateIPSecVpnSessionStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.aggregate_IP_sec_vpn_session_status', {
        'intent_path': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'IPSecVpnSessionStatusPerEP')]))),
    },
    AggregateIPSecVpnSessionStatus,
    False,
    None))



class AggregateL2VPNSessionPeerConfig(VapiStruct):
    """
    Aggregate of L2VPN Session peer config across Enforcement Points.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'intent_path': 'intent_path',
                            'results': 'results',
                            }

    def __init__(self,
                 intent_path=None,
                 results=None,
                ):
        """
        :type  intent_path: :class:`str` or ``None``
        :param intent_path: Intent path of object, forward slashes must be escaped using %2F.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param results: List of L2VPN Session peer config per Enforcement Point.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`L2VPNSessionPeerConfigPerEP`. When methods return a value
            of this class as a return value, the attribute will contain all the
            attributes defined in :class:`L2VPNSessionPeerConfigPerEP`.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.intent_path = intent_path
        self.results = results
        VapiStruct.__init__(self)


AggregateL2VPNSessionPeerConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.aggregate_l2_VPN_session_peer_config', {
        'intent_path': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'L2VPNSessionPeerConfigPerEP')]))),
    },
    AggregateL2VPNSessionPeerConfig,
    False,
    None))



class AggregateL2VPNSessionStatistics(VapiStruct):
    """
    Aggregate of L2VPN Session Statistics across Enforcement Points.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'intent_path': 'intent_path',
                            'results': 'results',
                            }

    def __init__(self,
                 intent_path=None,
                 results=None,
                ):
        """
        :type  intent_path: :class:`str` or ``None``
        :param intent_path: Intent path of object, forward slashes must be escaped using %2F.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param results: List of L2VPN Session Statistics per Enforcement Point.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`L2VPNSessionStatisticsPerEP`. When methods return a value
            of this class as a return value, the attribute will contain all the
            attributes defined in :class:`L2VPNSessionStatisticsPerEP`.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.intent_path = intent_path
        self.results = results
        VapiStruct.__init__(self)


AggregateL2VPNSessionStatistics._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.aggregate_l2_VPN_session_statistics', {
        'intent_path': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'L2VPNSessionStatisticsPerEP')]))),
    },
    AggregateL2VPNSessionStatistics,
    False,
    None))



class AggregateL2VPNSessionStatus(VapiStruct):
    """
    Aggregate of L2VPN Session Status across Enforcement Points.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'intent_path': 'intent_path',
                            'results': 'results',
                            }

    def __init__(self,
                 intent_path=None,
                 results=None,
                ):
        """
        :type  intent_path: :class:`str` or ``None``
        :param intent_path: Intent path of object, forward slashes must be escaped using %2F.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param results: List of L2VPN Session Status per Enforcement Point.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`L2VPNSessionStatusPerEP`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`L2VPNSessionStatusPerEP`.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.intent_path = intent_path
        self.results = results
        VapiStruct.__init__(self)


AggregateL2VPNSessionStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.aggregate_l2_VPN_session_status', {
        'intent_path': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'L2VPNSessionStatusPerEP')]))),
    },
    AggregateL2VPNSessionStatus,
    False,
    None))



class AggregateL2VpnPeerConfig(VapiStruct):
    """
    Aggregate of L2Vpn peer config across Enforcement Points.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'l2vpn_path': 'l2vpn_path',
                            'l2vpn_peer_config_per_enforcement_point': 'l2vpn_peer_config_per_enforcement_point',
                            }

    def __init__(self,
                 l2vpn_path=None,
                 l2vpn_peer_config_per_enforcement_point=None,
                ):
        """
        :type  l2vpn_path: :class:`str` or ``None``
        :param l2vpn_path: Policy path referencing the L2Vpn.
        :type  l2vpn_peer_config_per_enforcement_point: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param l2vpn_peer_config_per_enforcement_point: List of L2Vpn peer config per Enforcement Point.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`L2VpnPeerConfigPerEnforcementPoint`. When methods return a
            value of this class as a return value, the attribute will contain
            all the attributes defined in
            :class:`L2VpnPeerConfigPerEnforcementPoint`.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.l2vpn_path = l2vpn_path
        self.l2vpn_peer_config_per_enforcement_point = l2vpn_peer_config_per_enforcement_point
        VapiStruct.__init__(self)


AggregateL2VpnPeerConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.aggregate_l2_vpn_peer_config', {
        'l2vpn_path': type.OptionalType(type.StringType()),
        'l2vpn_peer_config_per_enforcement_point': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'L2VpnPeerConfigPerEnforcementPoint')]))),
    },
    AggregateL2VpnPeerConfig,
    False,
    None))



class AggregateL2VpnSessionRemoteMac(VapiStruct):
    """
    Aggregate of L2Vpn session remote mac across enforcement points.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'intent_path': 'intent_path',
                            'l2vpn_session_remote_macs': 'l2vpn_session_remote_macs',
                            }

    def __init__(self,
                 intent_path=None,
                 l2vpn_session_remote_macs=None,
                ):
        """
        :type  intent_path: :class:`str` or ``None``
        :param intent_path: Intent path of object, forward slashes must be escaped using %2F.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  l2vpn_session_remote_macs: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param l2vpn_session_remote_macs: List of L2Vpn Session remote mac
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`L2VpnSessionRemoteMacPerEP`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`L2VpnSessionRemoteMacPerEP`.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.intent_path = intent_path
        self.l2vpn_session_remote_macs = l2vpn_session_remote_macs
        VapiStruct.__init__(self)


AggregateL2VpnSessionRemoteMac._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.aggregate_l2_vpn_session_remote_mac', {
        'intent_path': type.OptionalType(type.StringType()),
        'l2vpn_session_remote_macs': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'L2VpnSessionRemoteMacPerEP')]))),
    },
    AggregateL2VpnSessionRemoteMac,
    False,
    None))



class AggregateL2VpnStatistics(VapiStruct):
    """
    Aggregate of L2Vpn Statistics across Enforcement Points.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'intent_path': 'intent_path',
                            'l2vpn_statistics_per_enforcement_point': 'l2vpn_statistics_per_enforcement_point',
                            }

    def __init__(self,
                 intent_path=None,
                 l2vpn_statistics_per_enforcement_point=None,
                ):
        """
        :type  intent_path: :class:`str` or ``None``
        :param intent_path: Intent path of object, forward slashes must be escaped using %2F.
        :type  l2vpn_statistics_per_enforcement_point: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param l2vpn_statistics_per_enforcement_point: List of L2Vpn Statistics per Enforcement Point.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`L2VpnStatisticsPerEnforcementPoint`. When methods return a
            value of this class as a return value, the attribute will contain
            all the attributes defined in
            :class:`L2VpnStatisticsPerEnforcementPoint`.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.intent_path = intent_path
        self.l2vpn_statistics_per_enforcement_point = l2vpn_statistics_per_enforcement_point
        VapiStruct.__init__(self)


AggregateL2VpnStatistics._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.aggregate_l2_vpn_statistics', {
        'intent_path': type.OptionalType(type.StringType()),
        'l2vpn_statistics_per_enforcement_point': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'L2VpnStatisticsPerEnforcementPoint')]))),
    },
    AggregateL2VpnStatistics,
    False,
    None))



class AggregateL3VpnStatistics(VapiStruct):
    """
    Aggregate of L3Vpn Statistics across Enforcement Points.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'intent_path': 'intent_path',
                            'l3vpn_statistics_per_enforcement_point': 'l3vpn_statistics_per_enforcement_point',
                            }

    def __init__(self,
                 intent_path=None,
                 l3vpn_statistics_per_enforcement_point=None,
                ):
        """
        :type  intent_path: :class:`str` or ``None``
        :param intent_path: Intent path of object, forward slashes must be escaped using %2F.
        :type  l3vpn_statistics_per_enforcement_point: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param l3vpn_statistics_per_enforcement_point: List of L3Vpn Statistics per Enforcement Point.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`L3VpnStatisticsPerEnforcementPoint`. When methods return a
            value of this class as a return value, the attribute will contain
            all the attributes defined in
            :class:`L3VpnStatisticsPerEnforcementPoint`.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.intent_path = intent_path
        self.l3vpn_statistics_per_enforcement_point = l3vpn_statistics_per_enforcement_point
        VapiStruct.__init__(self)


AggregateL3VpnStatistics._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.aggregate_l3_vpn_statistics', {
        'intent_path': type.OptionalType(type.StringType()),
        'l3vpn_statistics_per_enforcement_point': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'L3VpnStatisticsPerEnforcementPoint')]))),
    },
    AggregateL3VpnStatistics,
    False,
    None))



class AggregateLBNodeUsageSummary(VapiStruct):
    """
    Aggregate of LBNodeUsageSummary across Enforcement Points.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'intent_path': 'intent_path',
                            'results': 'results',
                            }

    def __init__(self,
                 intent_path=None,
                 results=None,
                ):
        """
        :type  intent_path: :class:`str` or ``None``
        :param intent_path: Intent path of object, forward slashes must be escaped using %2F.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`LBNodeUsageSummary` or ``None``
        :param results: LBNodeUsageSummary list results.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.intent_path = intent_path
        self.results = results
        VapiStruct.__init__(self)


AggregateLBNodeUsageSummary._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.aggregate_LB_node_usage_summary', {
        'intent_path': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'LBNodeUsageSummary'))),
    },
    AggregateLBNodeUsageSummary,
    False,
    None))



class AggregateLBPoolStatistics(VapiStruct):
    """
    Paged Collection of LBPoolStatisticsPerEP

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'intent_path': 'intent_path',
                            'results': 'results',
                            }

    def __init__(self,
                 intent_path=None,
                 results=None,
                ):
        """
        :type  intent_path: :class:`str` or ``None``
        :param intent_path: Intent path of object, forward slashes must be escaped using %2F.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param results: LBPoolStatisticsPerEP list results.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`LBPoolStatisticsPerEP`. When methods return a value of this
            class as a return value, the attribute will contain all the
            attributes defined in :class:`LBPoolStatisticsPerEP`.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.intent_path = intent_path
        self.results = results
        VapiStruct.__init__(self)


AggregateLBPoolStatistics._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.aggregate_LB_pool_statistics', {
        'intent_path': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'LBPoolStatisticsPerEP')]))),
    },
    AggregateLBPoolStatistics,
    False,
    None))



class AggregateLBPoolStatus(VapiStruct):
    """
    Paged Collection of LBPoolStatusPerEP

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'intent_path': 'intent_path',
                            'results': 'results',
                            }

    def __init__(self,
                 intent_path=None,
                 results=None,
                ):
        """
        :type  intent_path: :class:`str` or ``None``
        :param intent_path: Intent path of object, forward slashes must be escaped using %2F.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param results: LBPoolStatusPerEP list results.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`LBPoolStatusPerEP`. When methods return a value of this
            class as a return value, the attribute will contain all the
            attributes defined in :class:`LBPoolStatusPerEP`.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.intent_path = intent_path
        self.results = results
        VapiStruct.__init__(self)


AggregateLBPoolStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.aggregate_LB_pool_status', {
        'intent_path': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'LBPoolStatusPerEP')]))),
    },
    AggregateLBPoolStatus,
    False,
    None))



class AggregateLBServiceStatistics(VapiStruct):
    """
    Paged Collection of LBServiceStatisticsPerEP

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'intent_path': 'intent_path',
                            'results': 'results',
                            }

    def __init__(self,
                 intent_path=None,
                 results=None,
                ):
        """
        :type  intent_path: :class:`str` or ``None``
        :param intent_path: Intent path of object, forward slashes must be escaped using %2F.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param results: LBServiceStatisticsPerEP list results.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`LBServiceStatisticsPerEP`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`LBServiceStatisticsPerEP`.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.intent_path = intent_path
        self.results = results
        VapiStruct.__init__(self)


AggregateLBServiceStatistics._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.aggregate_LB_service_statistics', {
        'intent_path': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'LBServiceStatisticsPerEP')]))),
    },
    AggregateLBServiceStatistics,
    False,
    None))



class AggregateLBServiceStatus(VapiStruct):
    """
    Paged Collection of LBServiceStatusPerEP

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'intent_path': 'intent_path',
                            'results': 'results',
                            }

    def __init__(self,
                 intent_path=None,
                 results=None,
                ):
        """
        :type  intent_path: :class:`str` or ``None``
        :param intent_path: Intent path of object, forward slashes must be escaped using %2F.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param results: LBServiceStatusPerEP list results.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`LBServiceStatusPerEP`. When methods return a value of this
            class as a return value, the attribute will contain all the
            attributes defined in :class:`LBServiceStatusPerEP`.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.intent_path = intent_path
        self.results = results
        VapiStruct.__init__(self)


AggregateLBServiceStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.aggregate_LB_service_status', {
        'intent_path': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'LBServiceStatusPerEP')]))),
    },
    AggregateLBServiceStatus,
    False,
    None))



class AggregateLBServiceUsage(VapiStruct):
    """
    Aggregate of LBServiceUsagePerEP across Enforcement Points.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'intent_path': 'intent_path',
                            'results': 'results',
                            }

    def __init__(self,
                 intent_path=None,
                 results=None,
                ):
        """
        :type  intent_path: :class:`str` or ``None``
        :param intent_path: Intent path of object, forward slashes must be escaped using %2F.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param results: LBServiceUsagePerEP list results.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`LBServiceUsagePerEP`. When methods return a value of this
            class as a return value, the attribute will contain all the
            attributes defined in :class:`LBServiceUsagePerEP`.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.intent_path = intent_path
        self.results = results
        VapiStruct.__init__(self)


AggregateLBServiceUsage._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.aggregate_LB_service_usage', {
        'intent_path': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'LBServiceUsagePerEP')]))),
    },
    AggregateLBServiceUsage,
    False,
    None))



class AggregateLBVirtualServerStatistics(VapiStruct):
    """
    Paged Collection of LBVirtualServerStatisticsPerEP

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'intent_path': 'intent_path',
                            'results': 'results',
                            }

    def __init__(self,
                 intent_path=None,
                 results=None,
                ):
        """
        :type  intent_path: :class:`str` or ``None``
        :param intent_path: Intent path of object, forward slashes must be escaped using %2F.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param results: LBVirtualServerStatisticsPerEP list results.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`LBVirtualServerStatisticsPerEP`. When methods return a
            value of this class as a return value, the attribute will contain
            all the attributes defined in
            :class:`LBVirtualServerStatisticsPerEP`.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.intent_path = intent_path
        self.results = results
        VapiStruct.__init__(self)


AggregateLBVirtualServerStatistics._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.aggregate_LB_virtual_server_statistics', {
        'intent_path': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'LBVirtualServerStatisticsPerEP')]))),
    },
    AggregateLBVirtualServerStatistics,
    False,
    None))



class AggregateLBVirtualServerStatus(VapiStruct):
    """
    Paged Collection of LBVirtualServerStatusPerEP

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'intent_path': 'intent_path',
                            'results': 'results',
                            }

    def __init__(self,
                 intent_path=None,
                 results=None,
                ):
        """
        :type  intent_path: :class:`str` or ``None``
        :param intent_path: Intent path of object, forward slashes must be escaped using %2F.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param results: LBVirtualServerStatusPerEP list results.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`LBVirtualServerStatusPerEP`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`LBVirtualServerStatusPerEP`.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.intent_path = intent_path
        self.results = results
        VapiStruct.__init__(self)


AggregateLBVirtualServerStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.aggregate_LB_virtual_server_status', {
        'intent_path': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'LBVirtualServerStatusPerEP')]))),
    },
    AggregateLBVirtualServerStatus,
    False,
    None))



class AggregatePolicyDnsAnswer(VapiStruct):
    """
    Aggregate of DNS forwarder nslookup answer across enforcement points.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'dns_answer_per_enforcement_point': 'dns_answer_per_enforcement_point',
                            'intent_path': 'intent_path',
                            }

    def __init__(self,
                 dns_answer_per_enforcement_point=None,
                 intent_path=None,
                ):
        """
        :type  dns_answer_per_enforcement_point: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param dns_answer_per_enforcement_point: List of DNS forwarder nslookup answer per enforcement point.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyDnsAnswerPerEnforcementPoint`. When methods return a
            value of this class as a return value, the attribute will contain
            all the attributes defined in
            :class:`PolicyDnsAnswerPerEnforcementPoint`.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  intent_path: :class:`str` or ``None``
        :param intent_path: String path of the DNS forwarder intent.
        """
        self.dns_answer_per_enforcement_point = dns_answer_per_enforcement_point
        self.intent_path = intent_path
        VapiStruct.__init__(self)


AggregatePolicyDnsAnswer._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.aggregate_policy_dns_answer', {
        'dns_answer_per_enforcement_point': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyDnsAnswerPerEnforcementPoint')]))),
        'intent_path': type.OptionalType(type.StringType()),
    },
    AggregatePolicyDnsAnswer,
    False,
    None))



class AggregatePolicyRuntimeInfo(VapiStruct):
    """
    Aggregate of PolicyRuntimeInfoPerEP across Enforcement Points.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'intent_path': 'intent_path',
                            }

    def __init__(self,
                 intent_path=None,
                ):
        """
        :type  intent_path: :class:`str` or ``None``
        :param intent_path: Intent path of object, forward slashes must be escaped using %2F.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.intent_path = intent_path
        VapiStruct.__init__(self)


AggregatePolicyRuntimeInfo._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.aggregate_policy_runtime_info', {
        'intent_path': type.OptionalType(type.StringType()),
    },
    AggregatePolicyRuntimeInfo,
    False,
    None))



class AggregatedDataCounter(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'rx_bytes': 'rx_bytes',
                            'rx_packets': 'rx_packets',
                            'tx_bytes': 'tx_bytes',
                            'tx_packets': 'tx_packets',
                            }

    def __init__(self,
                 rx_bytes=None,
                 rx_packets=None,
                 tx_bytes=None,
                 tx_packets=None,
                ):
        """
        :type  rx_bytes: :class:`DataCounter` or ``None``
        :param rx_bytes: 
        :type  rx_packets: :class:`DataCounter` or ``None``
        :param rx_packets: 
        :type  tx_bytes: :class:`DataCounter` or ``None``
        :param tx_bytes: 
        :type  tx_packets: :class:`DataCounter` or ``None``
        :param tx_packets: 
        """
        self.rx_bytes = rx_bytes
        self.rx_packets = rx_packets
        self.tx_bytes = tx_bytes
        self.tx_packets = tx_packets
        VapiStruct.__init__(self)


AggregatedDataCounter._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.aggregated_data_counter', {
        'rx_bytes': type.OptionalType(type.ReferenceType(__name__, 'DataCounter')),
        'rx_packets': type.OptionalType(type.ReferenceType(__name__, 'DataCounter')),
        'tx_bytes': type.OptionalType(type.ReferenceType(__name__, 'DataCounter')),
        'tx_packets': type.OptionalType(type.ReferenceType(__name__, 'DataCounter')),
    },
    AggregatedDataCounter,
    False,
    None))



class AggregatedDataCounterEx(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'rx_bytes': 'rx_bytes',
                            'rx_packets': 'rx_packets',
                            'tx_bytes': 'tx_bytes',
                            'tx_packets': 'tx_packets',
                            'dropped_by_security_packets': 'dropped_by_security_packets',
                            'mac_learning': 'mac_learning',
                            }

    def __init__(self,
                 rx_bytes=None,
                 rx_packets=None,
                 tx_bytes=None,
                 tx_packets=None,
                 dropped_by_security_packets=None,
                 mac_learning=None,
                ):
        """
        :type  rx_bytes: :class:`DataCounter` or ``None``
        :param rx_bytes: 
        :type  rx_packets: :class:`DataCounter` or ``None``
        :param rx_packets: 
        :type  tx_bytes: :class:`DataCounter` or ``None``
        :param tx_bytes: 
        :type  tx_packets: :class:`DataCounter` or ``None``
        :param tx_packets: 
        :type  dropped_by_security_packets: :class:`PacketsDroppedBySecurity` or ``None``
        :param dropped_by_security_packets: 
        :type  mac_learning: :class:`MacLearningCounters` or ``None``
        :param mac_learning: 
        """
        self.rx_bytes = rx_bytes
        self.rx_packets = rx_packets
        self.tx_bytes = tx_bytes
        self.tx_packets = tx_packets
        self.dropped_by_security_packets = dropped_by_security_packets
        self.mac_learning = mac_learning
        VapiStruct.__init__(self)


AggregatedDataCounterEx._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.aggregated_data_counter_ex', {
        'rx_bytes': type.OptionalType(type.ReferenceType(__name__, 'DataCounter')),
        'rx_packets': type.OptionalType(type.ReferenceType(__name__, 'DataCounter')),
        'tx_bytes': type.OptionalType(type.ReferenceType(__name__, 'DataCounter')),
        'tx_packets': type.OptionalType(type.ReferenceType(__name__, 'DataCounter')),
        'dropped_by_security_packets': type.OptionalType(type.ReferenceType(__name__, 'PacketsDroppedBySecurity')),
        'mac_learning': type.OptionalType(type.ReferenceType(__name__, 'MacLearningCounters')),
    },
    AggregatedDataCounterEx,
    False,
    None))



class AggregatedLogicalRouterPortCounters(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'last_update_timestamp': 'last_update_timestamp',
                            'rx': 'rx',
                            'tx': 'tx',
                            }

    def __init__(self,
                 last_update_timestamp=None,
                 rx=None,
                 tx=None,
                ):
        """
        :type  last_update_timestamp: :class:`long` or ``None``
        :param last_update_timestamp: Timestamp when the data was last updated; unset if data source has
            never updated the data. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  rx: :class:`LogicalRouterPortCounters` or ``None``
        :param rx: 
        :type  tx: :class:`LogicalRouterPortCounters` or ``None``
        :param tx: 
        """
        self.last_update_timestamp = last_update_timestamp
        self.rx = rx
        self.tx = tx
        VapiStruct.__init__(self)


AggregatedLogicalRouterPortCounters._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.aggregated_logical_router_port_counters', {
        'last_update_timestamp': type.OptionalType(type.IntegerType()),
        'rx': type.OptionalType(type.ReferenceType(__name__, 'LogicalRouterPortCounters')),
        'tx': type.OptionalType(type.ReferenceType(__name__, 'LogicalRouterPortCounters')),
    },
    AggregatedLogicalRouterPortCounters,
    False,
    None))



class ApiError(VapiStruct):
    """
    Detailed information about an API Error

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'details': 'details',
                            'error_code': 'error_code',
                            'error_data': 'error_data',
                            'error_message': 'error_message',
                            'module_name': 'module_name',
                            'related_errors': 'related_errors',
                            }

    def __init__(self,
                 details=None,
                 error_code=None,
                 error_data=None,
                 error_message=None,
                 module_name=None,
                 related_errors=None,
                ):
        """
        :type  details: :class:`str` or ``None``
        :param details: Further details about the error
        :type  error_code: :class:`long` or ``None``
        :param error_code: A numeric error code format: int64
        :type  error_data: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param error_data: Additional data about the error
        :type  error_message: :class:`str` or ``None``
        :param error_message: A description of the error
        :type  module_name: :class:`str` or ``None``
        :param module_name: The module name where the error occurred
        :type  related_errors: :class:`list` of :class:`RelatedApiError` or ``None``
        :param related_errors: Other errors related to this error
        """
        self.details = details
        self.error_code = error_code
        self.error_data = error_data
        self.error_message = error_message
        self.module_name = module_name
        self.related_errors = related_errors
        VapiStruct.__init__(self)


ApiError._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.api_error', {
        'details': type.OptionalType(type.StringType()),
        'error_code': type.OptionalType(type.IntegerType()),
        'error_data': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct)),
        'error_message': type.OptionalType(type.StringType()),
        'module_name': type.OptionalType(type.StringType()),
        'related_errors': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'RelatedApiError'))),
    },
    ApiError,
    False,
    None))



class ApiRequestBody(VapiStruct):
    """
    API Request Body is an Event Source that represents an API request body
    that is being reveived as part of an API. Supported Request Bodies are
    those received as part of a PATCH/PUT/POST request.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ApiRequestBody"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'resource_pointer': 'resource_pointer',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 resource_pointer=None,
                 resource_type='ApiRequestBody',
                ):
        """
        :type  resource_pointer: :class:`str` or ``None``
        :param resource_pointer: Regex path representing a regex expression on resources. This regex
            is used to identify the request body(ies) that is/are the source of
            the Event. For instance: specifying \"Lb\* |
            /infra/tier-0s/vmc/ipsec-vpn-services/default\" as a source means
            that ANY resource starting with Lb or ANY resource with
            \"/infra/tier-0s/vmc/ipsec-vpn-services/default\" as path would be
            the source of the event in question.
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`Source.RESOURCE_TYPE_RESOURCEOPERATION`
            * :attr:`Source.RESOURCE_TYPE_APIREQUESTBODY`
            
             Event Source resource type.
        """
        self.resource_pointer = resource_pointer
        self._resource_type = resource_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ApiRequestBody._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.api_request_body', {
        'resource_pointer': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
    },
    ApiRequestBody,
    False,
    None))



class Application(VapiStruct):
    """
    Application is a collection of Tiers where every tier shares common
    Security and networking requirements. Application API exposes self service
    model of consumption.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'sites': 'sites',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 sites=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sites: :class:`list` of :class:`str` or ``None``
        :param sites: Path of the sites
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.sites = sites
        VapiStruct.__init__(self)


Application._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.application', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'sites': type.OptionalType(type.ListType(type.StringType())),
    },
    Application,
    False,
    None))



class ApplicationService(VapiStruct):
    """
    Networking and Security policy for Application.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'attributes': 'attributes',
                            'service_template_id': 'service_template_id',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 attributes=None,
                 service_template_id=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  attributes: :class:`list` of :class:`ApplicationServiceAttribute` or ``None``
        :param attributes: Property containing attributes for Policy Application Service.
        :type  service_template_id: :class:`str` or ``None``
        :param service_template_id: Application Service template id using which Application Service
            will be created. This will be available under the application
            service templates.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.attributes = attributes
        self.service_template_id = service_template_id
        VapiStruct.__init__(self)


ApplicationService._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.application_service', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'attributes': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ApplicationServiceAttribute'))),
        'service_template_id': type.OptionalType(type.StringType()),
    },
    ApplicationService,
    False,
    None))



class ApplicationServiceAttribute(VapiStruct):
    """
    Policy Application Service data holder

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'key_value': 'key_value',
                            }

    def __init__(self,
                 key_value=None,
                ):
        """
        :type  key_value: :class:`KeyValuePair` or ``None``
        :param key_value: Key value pair that will be used while deploying application
            service template.
        """
        self.key_value = key_value
        VapiStruct.__init__(self)


ApplicationServiceAttribute._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.application_service_attribute', {
        'key_value': type.OptionalType(type.ReferenceType(__name__, 'KeyValuePair')),
    },
    ApplicationServiceAttribute,
    False,
    None))



class ApplicationTier(VapiStruct):
    """
    A 'tier' is a set of workloads that share common networking and security
    services. Tiers provide a specific function for an application and are thus
    a collection of compute with their associated services.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    ACCESS_TYPE_PUBLIC = "Public"
    """


    """
    ACCESS_TYPE_PRIVATE = "Private"
    """


    """
    ACCESS_TYPE_SHARED = "Shared"
    """


    """
    SIZE_ONE = "ONE"
    """


    """
    SIZE_XXS = "XXS"
    """


    """
    SIZE_XS = "XS"
    """


    """
    SIZE_S = "S"
    """


    """
    SIZE_M = "M"
    """


    """
    SIZE_L = "L"
    """


    """
    SIZE_XL = "XL"
    """


    """
    SIZE_XXL = "XXL"
    """


    """
    SIZE_XXXL = "XXXL"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'access_type': 'access_type',
                            'ip_range': 'ip_range',
                            'size': 'size',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 access_type=None,
                 ip_range=None,
                 size=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  access_type: :class:`str` or ``None``
        :param access_type: Possible values are: 
            
            * :attr:`ApplicationTier.ACCESS_TYPE_PUBLIC`
            * :attr:`ApplicationTier.ACCESS_TYPE_PRIVATE`
            * :attr:`ApplicationTier.ACCESS_TYPE_SHARED`
            
            There are three kinds of Access Types supported for an Application.
            Public - Tier is accessible from external networks and its IP is
            picked up from public IP addresses from VHC configuration unless
            specified explicitly by user. Private - Tier is accessbile only
            within the application and its IP is picked up from private IP
            addresses from VHC configuration unless specified explicitly by
            user. Shared - Tier is accessible within the scope of VHC and its
            IP is picked up from private IP addresses from VHC configuration
            unless specified explicitly by user.
        :type  ip_range: :class:`str` or ``None``
        :param ip_range: This represents the subnet that is associated with tier. If this is
            specified, size property is ignored. format: ip-cidr-block
        :type  size: :class:`str` or ``None``
        :param size: Possible values are: 
            
            * :attr:`ApplicationTier.SIZE_ONE`
            * :attr:`ApplicationTier.SIZE_XXS`
            * :attr:`ApplicationTier.SIZE_XS`
            * :attr:`ApplicationTier.SIZE_S`
            * :attr:`ApplicationTier.SIZE_M`
            * :attr:`ApplicationTier.SIZE_L`
            * :attr:`ApplicationTier.SIZE_XL`
            * :attr:`ApplicationTier.SIZE_XXL`
            * :attr:`ApplicationTier.SIZE_XXXL`
            
            ONE - 1 XXS - 8 XS - 16 S - 32 M - 64 L - 128 XL - 256 XXL - 512
            XXXL - 1024
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.access_type = access_type
        self.ip_range = ip_range
        self.size = size
        VapiStruct.__init__(self)


ApplicationTier._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.application_tier', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'access_type': type.OptionalType(type.StringType()),
        'ip_range': type.OptionalType(type.StringType()),
        'size': type.OptionalType(type.StringType()),
    },
    ApplicationTier,
    False,
    None))



class ArpHeader(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    OP_CODE_REQUEST = "ARP_REQUEST"
    """


    """
    OP_CODE_REPLY = "ARP_REPLY"
    """


    """



    _canonical_to_pep_names = {
                            'dst_ip': 'dst_ip',
                            'op_code': 'op_code',
                            'src_ip': 'src_ip',
                            }

    def __init__(self,
                 dst_ip=None,
                 op_code=None,
                 src_ip=None,
                ):
        """
        :type  dst_ip: :class:`str` or ``None``
        :param dst_ip: The destination IP address format: ipv4
        :type  op_code: :class:`str` or ``None``
        :param op_code: Possible values are: 
            
            * :attr:`ArpHeader.OP_CODE_REQUEST`
            * :attr:`ArpHeader.OP_CODE_REPLY`
            
             This field specifies the nature of the Arp message being sent.
        :type  src_ip: :class:`str` or ``None``
        :param src_ip: This field specifies the IP address of the sender. If omitted, the
            src_ip is set to 0.0.0.0. format: ipv4
        """
        self.dst_ip = dst_ip
        self.op_code = op_code
        self.src_ip = src_ip
        VapiStruct.__init__(self)


ArpHeader._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.arp_header', {
        'dst_ip': type.OptionalType(type.StringType()),
        'op_code': type.OptionalType(type.StringType()),
        'src_ip': type.OptionalType(type.StringType()),
    },
    ArpHeader,
    False,
    None))



class ArpSnoopingConfig(VapiStruct):
    """
    Contains ARP snooping related configuration.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'arp_binding_limit': 'arp_binding_limit',
                            'arp_snooping_enabled': 'arp_snooping_enabled',
                            }

    def __init__(self,
                 arp_binding_limit=None,
                 arp_snooping_enabled=None,
                ):
        """
        :type  arp_binding_limit: :class:`long` or ``None``
        :param arp_binding_limit: Number of arp snooped IP addresses Indicates the number of arp
            snooped IP addresses to be remembered per LogicalPort. Decreasing
            this value, will retain the latest bindings from the existing list
            of address bindings. Increasing this value will retain existing
            bindings and also learn any new address bindings discovered on the
            port until the new limit is reached. format: int32
        :type  arp_snooping_enabled: :class:`bool` or ``None``
        :param arp_snooping_enabled: Indicates whether ARP snooping is enabled
        """
        self.arp_binding_limit = arp_binding_limit
        self.arp_snooping_enabled = arp_snooping_enabled
        VapiStruct.__init__(self)


ArpSnoopingConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.arp_snooping_config', {
        'arp_binding_limit': type.OptionalType(type.IntegerType()),
        'arp_snooping_enabled': type.OptionalType(type.BooleanType()),
    },
    ArpSnoopingConfig,
    False,
    None))



class Attribute(VapiStruct):
    """
    Attribute specific to a partner. There attributes are passed on to the
    partner appliance and is opaque to the NSX Manager. The Attributes used by
    the partner applicance.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    ATTRIBUTE_TYPE_IP_ADDRESS = "IP_ADDRESS"
    """


    """
    ATTRIBUTE_TYPE_PORT = "PORT"
    """


    """
    ATTRIBUTE_TYPE_PASSWORD = "PASSWORD"
    """


    """
    ATTRIBUTE_TYPE_STRING = "STRING"
    """


    """
    ATTRIBUTE_TYPE_LONG = "LONG"
    """


    """
    ATTRIBUTE_TYPE_BOOLEAN = "BOOLEAN"
    """


    """



    _canonical_to_pep_names = {
                            'attribute_type': 'attribute_type',
                            'display_name': 'display_name',
                            'key': 'key',
                            'read_only': 'read_only',
                            'value': 'value',
                            }

    def __init__(self,
                 attribute_type=None,
                 display_name=None,
                 key=None,
                 read_only=None,
                 value=None,
                ):
        """
        :type  attribute_type: :class:`str` or ``None``
        :param attribute_type: Possible values are: 
            
            * :attr:`Attribute.ATTRIBUTE_TYPE_IP_ADDRESS`
            * :attr:`Attribute.ATTRIBUTE_TYPE_PORT`
            * :attr:`Attribute.ATTRIBUTE_TYPE_PASSWORD`
            * :attr:`Attribute.ATTRIBUTE_TYPE_STRING`
            * :attr:`Attribute.ATTRIBUTE_TYPE_LONG`
            * :attr:`Attribute.ATTRIBUTE_TYPE_BOOLEAN`
            
             Attribute Type can be of any of the allowed enum type.
        :type  display_name: :class:`str` or ``None``
        :param display_name: Attribute display name string value.
        :type  key: :class:`str` or ``None``
        :param key: Attribute key string value.
        :type  read_only: :class:`bool` or ``None``
        :param read_only: Read only Attribute cannot be overdidden by service
            instance/deployment.
        :type  value: :class:`str` or ``None``
        :param value: Attribute value string value.
        """
        self.attribute_type = attribute_type
        self.display_name = display_name
        self.key = key
        self.read_only = read_only
        self.value = value
        VapiStruct.__init__(self)


Attribute._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.attribute', {
        'attribute_type': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'key': type.OptionalType(type.StringType()),
        'read_only': type.OptionalType(type.BooleanType()),
        'value': type.OptionalType(type.StringType()),
    },
    Attribute,
    False,
    None))



class AttributeVal(VapiStruct):
    """
    Contains type specific properties of generic realized entity

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    DATA_TYPE_STRING = "STRING"
    """


    """
    DATA_TYPE_DATE = "DATE"
    """


    """
    DATA_TYPE_INTEGER = "INTEGER"
    """


    """
    DATA_TYPE_BOOLEAN = "BOOLEAN"
    """


    """



    _canonical_to_pep_names = {
                            'data_type': 'data_type',
                            'key': 'key',
                            'multivalue': 'multivalue',
                            'values': 'values',
                            }

    def __init__(self,
                 data_type=None,
                 key=None,
                 multivalue=None,
                 values=None,
                ):
        """
        :type  data_type: :class:`str` or ``None``
        :param data_type: Possible values are: 
            
            * :attr:`AttributeVal.DATA_TYPE_STRING`
            * :attr:`AttributeVal.DATA_TYPE_DATE`
            * :attr:`AttributeVal.DATA_TYPE_INTEGER`
            * :attr:`AttributeVal.DATA_TYPE_BOOLEAN`
            
             Datatype of the property
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  key: :class:`str` or ``None``
        :param key: Attribute key
        :type  multivalue: :class:`bool` or ``None``
        :param multivalue: If attribute has a single value or collection of values
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  values: :class:`list` of :class:`str` or ``None``
        :param values: List of attribute values
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.data_type = data_type
        self.key = key
        self.multivalue = multivalue
        self.values = values
        VapiStruct.__init__(self)


AttributeVal._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.attribute_val', {
        'data_type': type.OptionalType(type.StringType()),
        'key': type.OptionalType(type.StringType()),
        'multivalue': type.OptionalType(type.BooleanType()),
        'values': type.OptionalType(type.ListType(type.StringType())),
    },
    AttributeVal,
    False,
    None))



class Axes(VapiStruct):
    """
    Represents X and Y axes of a graph. For a multi-graph, the same axes are
    shared by all the graphs.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'x_label': 'x_label',
                            'y_label': 'y_label',
                            }

    def __init__(self,
                 x_label=None,
                 y_label=None,
                ):
        """
        :type  x_label: :class:`Label` or ``None``
        :param x_label: Label for X axis of a graph
        :type  y_label: :class:`Label` or ``None``
        :param y_label: Label for Y axis of a graph
        """
        self.x_label = x_label
        self.y_label = y_label
        VapiStruct.__init__(self)


Axes._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.axes', {
        'x_label': type.OptionalType(type.ReferenceType(__name__, 'Label')),
        'y_label': type.OptionalType(type.ReferenceType(__name__, 'Label')),
    },
    Axes,
    False,
    None))



class BackupConfiguration(VapiStruct):
    """
    Configuration for taking manual/automated backup

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'after_inventory_update_interval': 'after_inventory_update_interval',
                            'backup_enabled': 'backup_enabled',
                            'backup_schedule': 'backup_schedule',
                            'inventory_summary_interval': 'inventory_summary_interval',
                            'passphrase': 'passphrase',
                            'remote_file_server': 'remote_file_server',
                            }

    def __init__(self,
                 after_inventory_update_interval=None,
                 backup_enabled=None,
                 backup_schedule=None,
                 inventory_summary_interval=None,
                 passphrase=None,
                 remote_file_server=None,
                ):
        """
        :type  after_inventory_update_interval: :class:`long` or ``None``
        :param after_inventory_update_interval: A number of seconds after a last backup, that needs to pass, before
            a topology change will trigger a generation of a new cluster/node
            backups. If parameter is not provided, then changes in a topology
            will not trigger a generation of cluster/node backups. format:
            int64
        :type  backup_enabled: :class:`bool` or ``None``
        :param backup_enabled: true if automated backup is enabled
        :type  backup_schedule: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param backup_schedule: Set when backups should be taken - on a weekly schedule or at
            regular intervals.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`BackupSchedule`. When methods return a value of this class
            as a return value, the attribute will contain all the attributes
            defined in :class:`BackupSchedule`.
        :type  inventory_summary_interval: :class:`long` or ``None``
        :param inventory_summary_interval: The minimum number of seconds between each upload of the inventory
            summary to backup server. format: int64
        :type  passphrase: :class:`str` or ``None``
        :param passphrase: Passphrase used to encrypt backup files. The passphrase specified
            must be at least 8 characters in length and must contain at least
            one lowercase, one uppercase, one numeric character and one special
            character (any other non-space character).
        :type  remote_file_server: :class:`RemoteFileServer` or ``None``
        :param remote_file_server: The server to which backups will be sent.
        """
        self.after_inventory_update_interval = after_inventory_update_interval
        self.backup_enabled = backup_enabled
        self.backup_schedule = backup_schedule
        self.inventory_summary_interval = inventory_summary_interval
        self.passphrase = passphrase
        self.remote_file_server = remote_file_server
        VapiStruct.__init__(self)


BackupConfiguration._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.backup_configuration', {
        'after_inventory_update_interval': type.OptionalType(type.IntegerType()),
        'backup_enabled': type.OptionalType(type.BooleanType()),
        'backup_schedule': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'BackupSchedule')])),
        'inventory_summary_interval': type.OptionalType(type.IntegerType()),
        'passphrase': type.OptionalType(type.StringType()),
        'remote_file_server': type.OptionalType(type.ReferenceType(__name__, 'RemoteFileServer')),
    },
    BackupConfiguration,
    False,
    None))



class BackupOperationHistory(VapiStruct):
    """
    Past backup operation details

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'cluster_backup_statuses': 'cluster_backup_statuses',
                            'inventory_backup_statuses': 'inventory_backup_statuses',
                            'node_backup_statuses': 'node_backup_statuses',
                            }

    def __init__(self,
                 cluster_backup_statuses=None,
                 inventory_backup_statuses=None,
                 node_backup_statuses=None,
                ):
        """
        :type  cluster_backup_statuses: :class:`list` of :class:`BackupOperationStatus` or ``None``
        :param cluster_backup_statuses: Statuses of previous cluser backups
        :type  inventory_backup_statuses: :class:`list` of :class:`BackupOperationStatus` or ``None``
        :param inventory_backup_statuses: Statuses of previous inventory backups
        :type  node_backup_statuses: :class:`list` of :class:`BackupOperationStatus` or ``None``
        :param node_backup_statuses: Statuses of previous node backups
        """
        self.cluster_backup_statuses = cluster_backup_statuses
        self.inventory_backup_statuses = inventory_backup_statuses
        self.node_backup_statuses = node_backup_statuses
        VapiStruct.__init__(self)


BackupOperationHistory._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.backup_operation_history', {
        'cluster_backup_statuses': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'BackupOperationStatus'))),
        'inventory_backup_statuses': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'BackupOperationStatus'))),
        'node_backup_statuses': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'BackupOperationStatus'))),
    },
    BackupOperationHistory,
    False,
    None))



class BackupOperationStatus(VapiStruct):
    """
    Backup operation status

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    ERROR_CODE_NOT_RUN_ON_MASTER = "BACKUP_NOT_RUN_ON_MASTER"
    """


    """
    ERROR_CODE_SERVER_UNREACHABLE = "BACKUP_SERVER_UNREACHABLE"
    """


    """
    ERROR_CODE_AUTHENTICATION_FAILURE = "BACKUP_AUTHENTICATION_FAILURE"
    """


    """
    ERROR_CODE_PERMISSION_ERROR = "BACKUP_PERMISSION_ERROR"
    """


    """
    ERROR_CODE_TIMEOUT = "BACKUP_TIMEOUT"
    """


    """
    ERROR_CODE_BAD_FINGERPRINT = "BACKUP_BAD_FINGERPRINT"
    """


    """
    ERROR_CODE_GENERIC_ERROR = "BACKUP_GENERIC_ERROR"
    """


    """



    _canonical_to_pep_names = {
                            'backup_id': 'backup_id',
                            'end_time': 'end_time',
                            'error_code': 'error_code',
                            'error_message': 'error_message',
                            'start_time': 'start_time',
                            'success': 'success',
                            }

    def __init__(self,
                 backup_id=None,
                 end_time=None,
                 error_code=None,
                 error_message=None,
                 start_time=None,
                 success=None,
                ):
        """
        :type  backup_id: :class:`str` or ``None``
        :param backup_id: Unique identifier of a backup
        :type  end_time: :class:`long` or ``None``
        :param end_time: Time when operation was ended format: int64
        :type  error_code: :class:`str` or ``None``
        :param error_code: Possible values are: 
            
            * :attr:`BackupOperationStatus.ERROR_CODE_NOT_RUN_ON_MASTER`
            * :attr:`BackupOperationStatus.ERROR_CODE_SERVER_UNREACHABLE`
            * :attr:`BackupOperationStatus.ERROR_CODE_AUTHENTICATION_FAILURE`
            * :attr:`BackupOperationStatus.ERROR_CODE_PERMISSION_ERROR`
            * :attr:`BackupOperationStatus.ERROR_CODE_TIMEOUT`
            * :attr:`BackupOperationStatus.ERROR_CODE_BAD_FINGERPRINT`
            * :attr:`BackupOperationStatus.ERROR_CODE_GENERIC_ERROR`
            
             Error code
        :type  error_message: :class:`str` or ``None``
        :param error_message: Error code details
        :type  start_time: :class:`long` or ``None``
        :param start_time: Time when operation was started format: int64
        :type  success: :class:`bool` or ``None``
        :param success: True if backup is successfully completed, else false
        """
        self.backup_id = backup_id
        self.end_time = end_time
        self.error_code = error_code
        self.error_message = error_message
        self.start_time = start_time
        self.success = success
        VapiStruct.__init__(self)


BackupOperationStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.backup_operation_status', {
        'backup_id': type.OptionalType(type.StringType()),
        'end_time': type.OptionalType(type.IntegerType()),
        'error_code': type.OptionalType(type.StringType()),
        'error_message': type.OptionalType(type.StringType()),
        'start_time': type.OptionalType(type.IntegerType()),
        'success': type.OptionalType(type.BooleanType()),
    },
    BackupOperationStatus,
    False,
    None))



class BackupOverview(VapiStruct):
    """
    Data for a single backup/restore card

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            'backup_config': 'backup_config',
                            'backup_operation_history': 'backup_operation_history',
                            'current_backup_operation_status': 'current_backup_operation_status',
                            'restore_status': 'restore_status',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                 backup_config=None,
                 backup_operation_history=None,
                 current_backup_operation_status=None,
                 restore_status=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`ClusterBackupInfo` or ``None``
        :param results: List of timestamps of backed-up cluster files
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  backup_config: :class:`BackupConfiguration` or ``None``
        :param backup_config: Configuration to generate a manual/automated backup
        :type  backup_operation_history: :class:`BackupOperationHistory` or ``None``
        :param backup_operation_history: Status of the last backup execution per component
        :type  current_backup_operation_status: :class:`CurrentBackupOperationStatus` or ``None``
        :param current_backup_operation_status: Backup status decribes type, phase, success/failure and time of a |
            latest backup execution
        :type  restore_status: :class:`ClusterRestoreStatus` or ``None``
        :param restore_status: Status of restore process executing/executed on appliance
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        self.backup_config = backup_config
        self.backup_operation_history = backup_operation_history
        self.current_backup_operation_status = current_backup_operation_status
        self.restore_status = restore_status
        VapiStruct.__init__(self)


BackupOverview._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.backup_overview', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ClusterBackupInfo'))),
        'backup_config': type.OptionalType(type.ReferenceType(__name__, 'BackupConfiguration')),
        'backup_operation_history': type.OptionalType(type.ReferenceType(__name__, 'BackupOperationHistory')),
        'current_backup_operation_status': type.OptionalType(type.ReferenceType(__name__, 'CurrentBackupOperationStatus')),
        'restore_status': type.OptionalType(type.ReferenceType(__name__, 'ClusterRestoreStatus')),
    },
    BackupOverview,
    False,
    None))



class BackupSchedule(VapiStruct):
    """
    Abstract base type for Weekly or Interval Backup Schedule

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "BackupSchedule"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    RESOURCE_TYPE_WEEKLYBACKUPSCHEDULE = "WeeklyBackupSchedule"
    """


    """
    RESOURCE_TYPE_INTERVALBACKUPSCHEDULE = "IntervalBackupSchedule"
    """


    """



    _canonical_to_pep_names = {
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 resource_type='BackupSchedule',
                ):
        """
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`BackupSchedule.RESOURCE_TYPE_WEEKLYBACKUPSCHEDULE`
            * :attr:`BackupSchedule.RESOURCE_TYPE_INTERVALBACKUPSCHEDULE`
            
             Schedule type
        """
        self._resource_type = resource_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

BackupSchedule._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.backup_schedule', {
        'resource_type': type.StringType(),
    },
    BackupSchedule,
    False,
    None))



class BaseConsolidatedStatusPerEnforcementPoint(VapiStruct):
    """
    Consolidated Realized Status Per Enforcement Point.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "BaseConsolidatedStatusPerEnforcementPoint"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'alarm': 'alarm',
                            'enforcement_point_path': 'enforcement_point_path',
                            'consolidated_status': 'consolidated_status',
                            'enforcement_point_id': 'enforcement_point_id',
                            'resource_type': 'resource_type',
                            'site_path': 'site_path',
                            }

    def __init__(self,
                 alarm=None,
                 enforcement_point_path=None,
                 consolidated_status=None,
                 enforcement_point_id=None,
                 resource_type='BaseConsolidatedStatusPerEnforcementPoint',
                 site_path=None,
                ):
        """
        :type  alarm: :class:`PolicyRuntimeAlarm` or ``None``
        :param alarm: Alarm information details.
        :type  enforcement_point_path: :class:`str` or ``None``
        :param enforcement_point_path: Policy Path referencing the enforcement point where the info is
            fetched.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  consolidated_status: :class:`ConsolidatedStatus` or ``None``
        :param consolidated_status: Consolidated Realized Status of an Intent object per enforcement
            point.
        :type  enforcement_point_id: :class:`str` or ``None``
        :param enforcement_point_id: Enforcement Point Id.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  site_path: :class:`str` or ``None``
        :param site_path: The site where this enforcement point resides.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.alarm = alarm
        self.enforcement_point_path = enforcement_point_path
        self.consolidated_status = consolidated_status
        self.enforcement_point_id = enforcement_point_id
        self._resource_type = resource_type
        self.site_path = site_path
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

BaseConsolidatedStatusPerEnforcementPoint._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.base_consolidated_status_per_enforcement_point', {
        'alarm': type.OptionalType(type.ReferenceType(__name__, 'PolicyRuntimeAlarm')),
        'enforcement_point_path': type.OptionalType(type.StringType()),
        'consolidated_status': type.OptionalType(type.ReferenceType(__name__, 'ConsolidatedStatus')),
        'enforcement_point_id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'site_path': type.OptionalType(type.StringType()),
    },
    BaseConsolidatedStatusPerEnforcementPoint,
    False,
    None))



class BaseEndpoint(VapiStruct):
    """
    Represents an endpoint which will be used as subject in rule. It is a
    polymorphic type object which can be either of the types - 1. Virtual 2.
    Logical We have 2 separate objects representing these 2 types.
    VirtualEndPoint for Virtual type and ServiceInstanceEndpoint for Logical.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "BaseEndpoint"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    RESOURCE_TYPE_VIRTUALENDPOINT = "VirtualEndpoint"
    """


    """
    RESOURCE_TYPE_SERVICEINSTANCEENDPOINT = "ServiceInstanceEndpoint"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'target_ips': 'target_ips',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='BaseEndpoint',
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 target_ips=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`BaseEndpoint.RESOURCE_TYPE_VIRTUALENDPOINT`
            * :attr:`BaseEndpoint.RESOURCE_TYPE_SERVICEINSTANCEENDPOINT`
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  target_ips: :class:`list` of :class:`IPInfo` or ``None``
        :param target_ips: IPs where either inbound or outbound traffic is to be redirected.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.target_ips = target_ips
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

BaseEndpoint._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.base_endpoint', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'target_ips': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'IPInfo'))),
    },
    BaseEndpoint,
    False,
    None))



class BasePolicyServiceInstance(VapiStruct):
    """
    Represents an instance of partner Service and its configuration.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    DEPLOYMENT_MODE_STAND_ALONE = "STAND_ALONE"
    """


    """
    DEPLOYMENT_MODE_ACTIVE_STANDBY = "ACTIVE_STANDBY"
    """


    """
    TRANSPORT_TYPE_L2_BRIDGE = "L2_BRIDGE"
    """


    """
    TRANSPORT_TYPE_L3_ROUTED = "L3_ROUTED"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'deployment_mode': 'deployment_mode',
                            'partner_service_name': 'partner_service_name',
                            'transport_type': 'transport_type',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 deployment_mode=None,
                 partner_service_name=None,
                 transport_type=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  deployment_mode: :class:`str` or ``None``
        :param deployment_mode: Possible values are: 
            
            * :attr:`BasePolicyServiceInstance.DEPLOYMENT_MODE_STAND_ALONE`
            * :attr:`BasePolicyServiceInstance.DEPLOYMENT_MODE_ACTIVE_STANDBY`
            
            Deployment mode specifies how the partner appliance will be
            deployed i.e. in HA or standalone mode.
        :type  partner_service_name: :class:`str` or ``None``
        :param partner_service_name: Unique name of Partner Service in the Marketplace
        :type  transport_type: :class:`str` or ``None``
        :param transport_type: Possible values are: 
            
            * :attr:`BasePolicyServiceInstance.TRANSPORT_TYPE_L2_BRIDGE`
            * :attr:`BasePolicyServiceInstance.TRANSPORT_TYPE_L3_ROUTED`
            
             Transport to be used while deploying Service-VM.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.deployment_mode = deployment_mode
        self.partner_service_name = partner_service_name
        self.transport_type = transport_type
        VapiStruct.__init__(self)


BasePolicyServiceInstance._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.base_policy_service_instance', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'deployment_mode': type.OptionalType(type.StringType()),
        'partner_service_name': type.OptionalType(type.StringType()),
        'transport_type': type.OptionalType(type.StringType()),
    },
    BasePolicyServiceInstance,
    False,
    None))



class BaseRule(VapiStruct):
    """
    A rule indicates the action to be performed for various types of traffic
    flowing between workload groups.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    DIRECTION_IN = "IN"
    """


    """
    DIRECTION_OUT = "OUT"
    """


    """
    DIRECTION_IN_OUT = "IN_OUT"
    """


    """
    IP_PROTOCOL_IPV4 = "IPV4"
    """


    """
    IP_PROTOCOL_IPV6 = "IPV6"
    """


    """
    IP_PROTOCOL_IPV4_IPV6 = "IPV4_IPV6"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'destination_groups': 'destination_groups',
                            'destinations_excluded': 'destinations_excluded',
                            'direction': 'direction',
                            'disabled': 'disabled',
                            'ip_protocol': 'ip_protocol',
                            'is_default': 'is_default',
                            'logged': 'logged',
                            'notes': 'notes',
                            'profiles': 'profiles',
                            'rule_id': 'rule_id',
                            'scope': 'scope',
                            'sequence_number': 'sequence_number',
                            'service_entries': 'service_entries',
                            'services': 'services',
                            'source_groups': 'source_groups',
                            'sources_excluded': 'sources_excluded',
                            'tag': 'tag',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 destination_groups=None,
                 destinations_excluded=None,
                 direction=None,
                 disabled=None,
                 ip_protocol=None,
                 is_default=None,
                 logged=None,
                 notes=None,
                 profiles=None,
                 rule_id=None,
                 scope=None,
                 sequence_number=None,
                 service_entries=None,
                 services=None,
                 source_groups=None,
                 sources_excluded=None,
                 tag=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  destination_groups: :class:`list` of :class:`str` or ``None``
        :param destination_groups: We need paths as duplicate names may exist for groups under
            different domains. Along with paths we support IP Address of type
            IPv4 and IPv6. IP Address can be in one of the format(CIDR, IP
            Address, Range of IP Address). In order to specify all groups, use
            the constant \"ANY\". This is case insensitive. If \"ANY\" is used,
            it should be the ONLY element in the group array. Error will be
            thrown if ANY is used in conjunction with other values.
        :type  destinations_excluded: :class:`bool` or ``None``
        :param destinations_excluded: If set to true, the rule gets applied on all the groups that are
            NOT part of the destination groups. If false, the rule applies to
            the destination groups
        :type  direction: :class:`str` or ``None``
        :param direction: Possible values are: 
            
            * :attr:`BaseRule.DIRECTION_IN`
            * :attr:`BaseRule.DIRECTION_OUT`
            * :attr:`BaseRule.DIRECTION_IN_OUT`
            
             Define direction of traffic.
        :type  disabled: :class:`bool` or ``None``
        :param disabled: Flag to disable the rule. Default is enabled.
        :type  ip_protocol: :class:`str` or ``None``
        :param ip_protocol: Possible values are: 
            
            * :attr:`BaseRule.IP_PROTOCOL_IPV4`
            * :attr:`BaseRule.IP_PROTOCOL_IPV6`
            * :attr:`BaseRule.IP_PROTOCOL_IPV4_IPV6`
            
            Type of IP packet that should be matched while enforcing the rule.
            The value is set to IPV4_IPV6 for Layer3 rule if not specified. For
            Layer2/Ether rule the value must be null.
        :type  is_default: :class:`bool` or ``None``
        :param is_default: A flag to indicate whether rule is a default rule.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  logged: :class:`bool` or ``None``
        :param logged: Flag to enable packet logging. Default is disabled.
        :type  notes: :class:`str` or ``None``
        :param notes: Text for additional notes on changes.
        :type  profiles: :class:`list` of :class:`str` or ``None``
        :param profiles: Holds the list of layer 7 service profile paths. These profiles
            accept attributes and sub-attributes of various network services
            (e.g. L4 AppId, encryption algorithm, domain name, etc) as key
            value pairs.
        :type  rule_id: :class:`long` or ``None``
        :param rule_id: This is a unique 4 byte positive number that is assigned by the
            system. This rule id is passed all the way down to the data path.
            The first 1GB (1000 to 2^30) will be shared by GM and LM with zebra
            style striped number space. For E.g 1000 to (1Million -1) by LM,
            (1M - 2M-1) by GM and so on. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  scope: :class:`list` of :class:`str` or ``None``
        :param scope: The list of policy paths where the rule is applied
            LR/Edge/T0/T1/LRP etc. Note that a given rule can be applied on
            multiple LRs/LRPs.
        :type  sequence_number: :class:`long` or ``None``
        :param sequence_number: This field is used to resolve conflicts between multiple Rules
            under Security or Gateway Policy for a Domain If no sequence number
            is specified in the payload, a value of 0 is assigned by default.
            If there are multiple rules with the same sequence number then
            their order is not deterministic. If a specific order of rules is
            desired, then one has to specify unique sequence numbers or use the
            POST request on the rule entity with a query parameter
            action=revise to let the framework assign a sequence number format:
            int32
        :type  service_entries: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param service_entries: In order to specify raw services this can be used, along with
            services which contains path to services. This can be empty or
            null.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ServiceEntry`. When methods return a value of this class as
            a return value, the attribute will contain all the attributes
            defined in :class:`ServiceEntry`.
        :type  services: :class:`list` of :class:`str` or ``None``
        :param services: In order to specify all services, use the constant \"ANY\". This is
            case insensitive. If \"ANY\" is used, it should be the ONLY element
            in the services array. Error will be thrown if ANY is used in
            conjunction with other values.
        :type  source_groups: :class:`list` of :class:`str` or ``None``
        :param source_groups: We need paths as duplicate names may exist for groups under
            different domains. Along with paths we support IP Address of type
            IPv4 and IPv6. IP Address can be in one of the format(CIDR, IP
            Address, Range of IP Address). In order to specify all groups, use
            the constant \"ANY\". This is case insensitive. If \"ANY\" is used,
            it should be the ONLY element in the group array. Error will be
            thrown if ANY is used in conjunction with other values.
        :type  sources_excluded: :class:`bool` or ``None``
        :param sources_excluded: If set to true, the rule gets applied on all the groups that are
            NOT part of the source groups. If false, the rule applies to the
            source groups
        :type  tag: :class:`str` or ``None``
        :param tag: User level field which will be printed in CLI and packet logs.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.destination_groups = destination_groups
        self.destinations_excluded = destinations_excluded
        self.direction = direction
        self.disabled = disabled
        self.ip_protocol = ip_protocol
        self.is_default = is_default
        self.logged = logged
        self.notes = notes
        self.profiles = profiles
        self.rule_id = rule_id
        self.scope = scope
        self.sequence_number = sequence_number
        self.service_entries = service_entries
        self.services = services
        self.source_groups = source_groups
        self.sources_excluded = sources_excluded
        self.tag = tag
        VapiStruct.__init__(self)


BaseRule._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.base_rule', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'destination_groups': type.OptionalType(type.ListType(type.StringType())),
        'destinations_excluded': type.OptionalType(type.BooleanType()),
        'direction': type.OptionalType(type.StringType()),
        'disabled': type.OptionalType(type.BooleanType()),
        'ip_protocol': type.OptionalType(type.StringType()),
        'is_default': type.OptionalType(type.BooleanType()),
        'logged': type.OptionalType(type.BooleanType()),
        'notes': type.OptionalType(type.StringType()),
        'profiles': type.OptionalType(type.ListType(type.StringType())),
        'rule_id': type.OptionalType(type.IntegerType()),
        'scope': type.OptionalType(type.ListType(type.StringType())),
        'sequence_number': type.OptionalType(type.IntegerType()),
        'service_entries': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ServiceEntry')]))),
        'services': type.OptionalType(type.ListType(type.StringType())),
        'source_groups': type.OptionalType(type.ListType(type.StringType())),
        'sources_excluded': type.OptionalType(type.BooleanType()),
        'tag': type.OptionalType(type.StringType()),
    },
    BaseRule,
    False,
    None))



class BaseRuleListResult(VapiStruct):
    """
    Paged Collection of Rules

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        VapiStruct.__init__(self)


BaseRuleListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.base_rule_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
    },
    BaseRuleListResult,
    False,
    None))



class BaseTier0Interface(VapiStruct):
    """
    Tier-0 interface configuration for external connectivity.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'subnets': 'subnets',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 subnets=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  subnets: :class:`list` of :class:`InterfaceSubnet` or ``None``
        :param subnets: Specify IP address and network prefix for interface.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.subnets = subnets
        VapiStruct.__init__(self)


BaseTier0Interface._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.base_tier0_interface', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'subnets': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'InterfaceSubnet'))),
    },
    BaseTier0Interface,
    False,
    None))



class BatchRequest(VapiStruct):
    """
    A set of operations to be performed in a single batch

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'continue_on_error': 'continue_on_error',
                            'requests': 'requests',
                            }

    def __init__(self,
                 continue_on_error=None,
                 requests=None,
                ):
        """
        :type  continue_on_error: :class:`bool` or ``None``
        :param continue_on_error: Flag to decide if we will continue processing subsequent requests
            in case of current error for atomic = false.
        :type  requests: :class:`list` of :class:`BatchRequestItem` or ``None``
        :param requests: 
        """
        self.continue_on_error = continue_on_error
        self.requests = requests
        VapiStruct.__init__(self)


BatchRequest._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.batch_request', {
        'continue_on_error': type.OptionalType(type.BooleanType()),
        'requests': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'BatchRequestItem'))),
    },
    BatchRequest,
    False,
    None))



class BatchRequestItem(VapiStruct):
    """
    A single request within a batch of operations

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    METHOD_GET = "GET"
    """


    """
    METHOD_POST = "POST"
    """


    """
    METHOD_PUT = "PUT"
    """


    """
    METHOD_DELETE = "DELETE"
    """


    """
    METHOD_PATCH = "PATCH"
    """


    """



    _canonical_to_pep_names = {
                            'body': 'body',
                            'method': 'method',
                            'uri': 'uri',
                            }

    def __init__(self,
                 body=None,
                 method=None,
                 uri=None,
                ):
        """
        :type  body: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param body: 
        :type  method: :class:`str` or ``None``
        :param method: Possible values are: 
            
            * :attr:`BatchRequestItem.METHOD_GET`
            * :attr:`BatchRequestItem.METHOD_POST`
            * :attr:`BatchRequestItem.METHOD_PUT`
            * :attr:`BatchRequestItem.METHOD_DELETE`
            * :attr:`BatchRequestItem.METHOD_PATCH`
            
             http method type
        :type  uri: :class:`str` or ``None``
        :param uri: relative uri (path and args), of the call including resource id (if
            this is a POST/DELETE), exclude hostname and port and prefix,
            exploded form of parameters
        """
        self.body = body
        self.method = method
        self.uri = uri
        VapiStruct.__init__(self)


BatchRequestItem._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.batch_request_item', {
        'body': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct)),
        'method': type.OptionalType(type.StringType()),
        'uri': type.OptionalType(type.StringType()),
    },
    BatchRequestItem,
    False,
    None))



class BatchResponse(VapiStruct):
    """
    The reponse to a batch operation

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'has_errors': 'has_errors',
                            'results': 'results',
                            'rolled_back': 'rolled_back',
                            }

    def __init__(self,
                 has_errors=None,
                 results=None,
                 rolled_back=None,
                ):
        """
        :type  has_errors: :class:`bool` or ``None``
        :param has_errors: Indicates if any of the APIs failed
        :type  results: :class:`list` of :class:`BatchResponseItem` or ``None``
        :param results: Bulk list results
        :type  rolled_back: :class:`bool` or ``None``
        :param rolled_back: Optional flag indicating that all items were rolled back even if
            succeeded initially
        """
        self.has_errors = has_errors
        self.results = results
        self.rolled_back = rolled_back
        VapiStruct.__init__(self)


BatchResponse._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.batch_response', {
        'has_errors': type.OptionalType(type.BooleanType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'BatchResponseItem'))),
        'rolled_back': type.OptionalType(type.BooleanType()),
    },
    BatchResponse,
    False,
    None))



class BatchResponseItem(VapiStruct):
    """
    A single respose in a list of batched responses

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'body': 'body',
                            'code': 'code',
                            'headers': 'headers',
                            }

    def __init__(self,
                 body=None,
                 code=None,
                 headers=None,
                ):
        """
        :type  body: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param body: object returned by api
        :type  code: :class:`long` or ``None``
        :param code: http status code format: int64
        :type  headers: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param headers: The headers returned by the API call
        """
        self.body = body
        self.code = code
        self.headers = headers
        VapiStruct.__init__(self)


BatchResponseItem._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.batch_response_item', {
        'body': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct)),
        'code': type.OptionalType(type.IntegerType()),
        'headers': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct)),
    },
    BatchResponseItem,
    False,
    None))



class BfdProfile(VapiStruct):
    """
    Bidirectional Forwarding Detection configuration for BGP peers

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'interval': 'interval',
                            'multiple': 'multiple',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 interval=None,
                 multiple=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  interval: :class:`long` or ``None``
        :param interval: Time interval between heartbeat packets in milliseconds. format:
            int32
        :type  multiple: :class:`long` or ``None``
        :param multiple: Declare dead multiple. Number of times heartbeat packet is missed
            before BFD declares the neighbor is down. format: int32
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.interval = interval
        self.multiple = multiple
        VapiStruct.__init__(self)


BfdProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.bfd_profile', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'interval': type.OptionalType(type.IntegerType()),
        'multiple': type.OptionalType(type.IntegerType()),
    },
    BfdProfile,
    False,
    None))



class BfdProfileListResult(VapiStruct):
    """
    Paged Collection of BfdProfile.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`BfdProfile` or ``None``
        :param results: Bfd Profile list results.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


BfdProfileListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.bfd_profile_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'BfdProfile'))),
    },
    BfdProfileListResult,
    False,
    None))



class BgpAddressFamily(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    TYPE_IPV4_UNICAST = "IPV4_UNICAST"
    """


    """
    TYPE_VPNV4_UNICAST = "VPNV4_UNICAST"
    """


    """
    TYPE_IPV6_UNICAST = "IPV6_UNICAST"
    """


    """
    TYPE_L2VPN_EVPN = "L2VPN_EVPN"
    """


    """



    _canonical_to_pep_names = {
                            'in_prefix_count': 'in_prefix_count',
                            'out_prefix_count': 'out_prefix_count',
                            'type': 'type',
                            }

    def __init__(self,
                 in_prefix_count=None,
                 out_prefix_count=None,
                 type=None,
                ):
        """
        :type  in_prefix_count: :class:`long` or ``None``
        :param in_prefix_count: Count of in prefixes format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  out_prefix_count: :class:`long` or ``None``
        :param out_prefix_count: Count of out prefixes format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  type: :class:`str` or ``None``
        :param type: Possible values are: 
            
            * :attr:`BgpAddressFamily.TYPE_IPV4_UNICAST`
            * :attr:`BgpAddressFamily.TYPE_VPNV4_UNICAST`
            * :attr:`BgpAddressFamily.TYPE_IPV6_UNICAST`
            * :attr:`BgpAddressFamily.TYPE_L2VPN_EVPN`
            
             BGP address family type
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.in_prefix_count = in_prefix_count
        self.out_prefix_count = out_prefix_count
        self.type = type
        VapiStruct.__init__(self)


BgpAddressFamily._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.bgp_address_family', {
        'in_prefix_count': type.OptionalType(type.IntegerType()),
        'out_prefix_count': type.OptionalType(type.IntegerType()),
        'type': type.OptionalType(type.StringType()),
    },
    BgpAddressFamily,
    False,
    None))



class BgpBfdConfig(VapiStruct):
    """
    BFD configuration for BGP peers

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'enabled': 'enabled',
                            'interval': 'interval',
                            'multiple': 'multiple',
                            }

    def __init__(self,
                 enabled=None,
                 interval=None,
                 multiple=None,
                ):
        """
        :type  enabled: :class:`bool` or ``None``
        :param enabled: Flag to enable BFD cofiguration.
        :type  interval: :class:`long` or ``None``
        :param interval: Time interval between heartbeat packets in milliseconds. format:
            int32
        :type  multiple: :class:`long` or ``None``
        :param multiple: Declare dead multiple. Number of times heartbeat packet is missed
            before BFD declares the neighbor is down. format: int32
        """
        self.enabled = enabled
        self.interval = interval
        self.multiple = multiple
        VapiStruct.__init__(self)


BgpBfdConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.bgp_bfd_config', {
        'enabled': type.OptionalType(type.BooleanType()),
        'interval': type.OptionalType(type.IntegerType()),
        'multiple': type.OptionalType(type.IntegerType()),
    },
    BgpBfdConfig,
    False,
    None))



class BgpGracefulRestartConfig(VapiStruct):
    """
    Configuration field to hold BGP restart mode and timer.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    MODE_DISABLE = "DISABLE"
    """


    """
    MODE_GR_AND_HELPER = "GR_AND_HELPER"
    """


    """
    MODE_HELPER_ONLY = "HELPER_ONLY"
    """


    """



    _canonical_to_pep_names = {
                            'mode': 'mode',
                            'timer': 'timer',
                            }

    def __init__(self,
                 mode=None,
                 timer=None,
                ):
        """
        :type  mode: :class:`str` or ``None``
        :param mode: Possible values are: 
            
            * :attr:`BgpGracefulRestartConfig.MODE_DISABLE`
            * :attr:`BgpGracefulRestartConfig.MODE_GR_AND_HELPER`
            * :attr:`BgpGracefulRestartConfig.MODE_HELPER_ONLY`
            
            If mode is DISABLE, then graceful restart and helper modes are
            disabled. If mode is GR_AND_HELPER, then both graceful restart and
            helper modes are enabled. If mode is HELPER_ONLY, then helper mode
            is enabled. HELPER_ONLY mode is the ability for a BGP speaker to
            indicate its ability to preserve forwarding state during BGP
            restart. GRACEFUL_RESTART mode is the ability of a BGP speaker to
            advertise its restart to its peers.
        :type  timer: :class:`BgpGracefulRestartTimer` or ``None``
        :param timer: Configuration field to hold BGP restart timers.
        """
        self.mode = mode
        self.timer = timer
        VapiStruct.__init__(self)


BgpGracefulRestartConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.bgp_graceful_restart_config', {
        'mode': type.OptionalType(type.StringType()),
        'timer': type.OptionalType(type.ReferenceType(__name__, 'BgpGracefulRestartTimer')),
    },
    BgpGracefulRestartConfig,
    False,
    None))



class BgpGracefulRestartTimer(VapiStruct):
    """
    Configuration field to hold BGP restart timers

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'restart_timer': 'restart_timer',
                            'stale_route_timer': 'stale_route_timer',
                            }

    def __init__(self,
                 restart_timer=None,
                 stale_route_timer=None,
                ):
        """
        :type  restart_timer: :class:`long` or ``None``
        :param restart_timer: Maximum time taken (in seconds) for a BGP session to be established
            after a restart. This can be used to speed up routing convergence
            by its peer in case the BGP speaker does not come back up after a
            restart. If the session is not re-established within this timer,
            the receiving speaker will delete all the stale routes from that
            peer. format: int64
        :type  stale_route_timer: :class:`long` or ``None``
        :param stale_route_timer: Maximum time (in seconds) before stale routes are removed from the
            RIB (Routing Information Base) when BGP restarts. format: int64
        """
        self.restart_timer = restart_timer
        self.stale_route_timer = stale_route_timer
        VapiStruct.__init__(self)


BgpGracefulRestartTimer._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.bgp_graceful_restart_timer', {
        'restart_timer': type.OptionalType(type.IntegerType()),
        'stale_route_timer': type.OptionalType(type.IntegerType()),
    },
    BgpGracefulRestartTimer,
    False,
    None))



class BgpNeighborConfig(VapiStruct):
    """
    Contains information necessary to configure a BGP neighbor.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    GRACEFUL_RESTART_MODE_DISABLE = "DISABLE"
    """


    """
    GRACEFUL_RESTART_MODE_GR_AND_HELPER = "GR_AND_HELPER"
    """


    """
    GRACEFUL_RESTART_MODE_HELPER_ONLY = "HELPER_ONLY"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'allow_as_in': 'allow_as_in',
                            'bfd': 'bfd',
                            'graceful_restart_mode': 'graceful_restart_mode',
                            'hold_down_time': 'hold_down_time',
                            'in_route_filters': 'in_route_filters',
                            'keep_alive_time': 'keep_alive_time',
                            'maximum_hop_limit': 'maximum_hop_limit',
                            'neighbor_address': 'neighbor_address',
                            'out_route_filters': 'out_route_filters',
                            'password': 'password',
                            'remote_as_num': 'remote_as_num',
                            'route_filtering': 'route_filtering',
                            'source_addresses': 'source_addresses',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 allow_as_in=None,
                 bfd=None,
                 graceful_restart_mode=None,
                 hold_down_time=None,
                 in_route_filters=None,
                 keep_alive_time=None,
                 maximum_hop_limit=None,
                 neighbor_address=None,
                 out_route_filters=None,
                 password=None,
                 remote_as_num=None,
                 route_filtering=None,
                 source_addresses=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  allow_as_in: :class:`bool` or ``None``
        :param allow_as_in: Flag to enable allowas_in option for BGP neighbor
        :type  bfd: :class:`BgpBfdConfig` or ``None``
        :param bfd: BFD configuration for failure detection. BFD is enabled with
            default values when not configured.
        :type  graceful_restart_mode: :class:`str` or ``None``
        :param graceful_restart_mode: Possible values are: 
            
            * :attr:`BgpNeighborConfig.GRACEFUL_RESTART_MODE_DISABLE`
            * :attr:`BgpNeighborConfig.GRACEFUL_RESTART_MODE_GR_AND_HELPER`
            * :attr:`BgpNeighborConfig.GRACEFUL_RESTART_MODE_HELPER_ONLY`
            
            If mode is DISABLE, then graceful restart and helper modes are
            disabled. If mode is GR_AND_HELPER, then both graceful restart and
            helper modes are enabled. If mode is HELPER_ONLY, then helper mode
            is enabled. HELPER_ONLY mode is the ability for a BGP speaker to
            indicate its ability to preserve forwarding state during BGP
            restart. GRACEFUL_RESTART mode is the ability of a BGP speaker to
            advertise its restart to its peers.
        :type  hold_down_time: :class:`long` or ``None``
        :param hold_down_time: Wait time in seconds before declaring peer dead. format: int32
        :type  in_route_filters: :class:`list` of :class:`str` or ``None``
        :param in_route_filters: Specify path of prefix-list or route map to filter routes for IN
            direction. This property is deprecated, use route_filtering
            instead. Specifying different values for both properties will
            result in error.
        :type  keep_alive_time: :class:`long` or ``None``
        :param keep_alive_time: Interval (in seconds) between keep alive messages sent to peer.
            format: int32
        :type  maximum_hop_limit: :class:`long` or ``None``
        :param maximum_hop_limit: Maximum number of hops allowed to reach BGP neighbor. format: int32
        :type  neighbor_address: :class:`str` or ``None``
        :param neighbor_address: Neighbor IP Address format: ip
        :type  out_route_filters: :class:`list` of :class:`str` or ``None``
        :param out_route_filters: Specify path of prefix-list or route map to filter routes for OUT
            direction. When not specified, a built-in prefix-list named
            'prefixlist-out-default' is automatically applied. This property is
            deprecated, use route_filtering instead. Specifying different
            values for both properties will result in error.
        :type  password: :class:`str` or ``None``
        :param password: Specify password for BGP neighbor authentication. Empty string
            (\"\") clears existing password.
        :type  remote_as_num: :class:`str` or ``None``
        :param remote_as_num: 4 Byte ASN of the neighbor in ASPLAIN Format
        :type  route_filtering: :class:`list` of :class:`BgpRouteFiltering` or ``None``
        :param route_filtering: Enable address families and route filtering in each direction.
        :type  source_addresses: :class:`list` of :class:`str` or ``None``
        :param source_addresses: Source addresses should belong to Tier0 external or loopback
            interface IP Addresses . BGP peering is formed from all these
            addresses. This property is mandatory when maximum_hop_limit is
            greater than 1. format: ip
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.allow_as_in = allow_as_in
        self.bfd = bfd
        self.graceful_restart_mode = graceful_restart_mode
        self.hold_down_time = hold_down_time
        self.in_route_filters = in_route_filters
        self.keep_alive_time = keep_alive_time
        self.maximum_hop_limit = maximum_hop_limit
        self.neighbor_address = neighbor_address
        self.out_route_filters = out_route_filters
        self.password = password
        self.remote_as_num = remote_as_num
        self.route_filtering = route_filtering
        self.source_addresses = source_addresses
        VapiStruct.__init__(self)


BgpNeighborConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.bgp_neighbor_config', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'allow_as_in': type.OptionalType(type.BooleanType()),
        'bfd': type.OptionalType(type.ReferenceType(__name__, 'BgpBfdConfig')),
        'graceful_restart_mode': type.OptionalType(type.StringType()),
        'hold_down_time': type.OptionalType(type.IntegerType()),
        'in_route_filters': type.OptionalType(type.ListType(type.StringType())),
        'keep_alive_time': type.OptionalType(type.IntegerType()),
        'maximum_hop_limit': type.OptionalType(type.IntegerType()),
        'neighbor_address': type.OptionalType(type.StringType()),
        'out_route_filters': type.OptionalType(type.ListType(type.StringType())),
        'password': type.OptionalType(type.StringType()),
        'remote_as_num': type.OptionalType(type.StringType()),
        'route_filtering': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'BgpRouteFiltering'))),
        'source_addresses': type.OptionalType(type.ListType(type.StringType())),
    },
    BgpNeighborConfig,
    False,
    None))



class BgpNeighborConfigListResult(VapiStruct):
    """
    Paged collection of BGP Neighbor Configs

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`BgpNeighborConfig` or ``None``
        :param results: BGP neighbor configs list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


BgpNeighborConfigListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.bgp_neighbor_config_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'BgpNeighborConfig'))),
    },
    BgpNeighborConfigListResult,
    False,
    None))



class BgpNeighborRouteDetailsCsvRecord(VapiStruct):
    """
    BGP neighbor learned/advertised route details.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'as_path': 'as_path',
                            'local_pref': 'local_pref',
                            'logical_router_id': 'logical_router_id',
                            'med': 'med',
                            'neighbor_address': 'neighbor_address',
                            'neighbor_id': 'neighbor_id',
                            'network': 'network',
                            'next_hop': 'next_hop',
                            'source_address': 'source_address',
                            'transport_node_id': 'transport_node_id',
                            'weight': 'weight',
                            }

    def __init__(self,
                 as_path=None,
                 local_pref=None,
                 logical_router_id=None,
                 med=None,
                 neighbor_address=None,
                 neighbor_id=None,
                 network=None,
                 next_hop=None,
                 source_address=None,
                 transport_node_id=None,
                 weight=None,
                ):
        """
        :type  as_path: :class:`str` or ``None``
        :param as_path: BGP AS path attribute.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  local_pref: :class:`long` or ``None``
        :param local_pref: BGP Local Preference attribute. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  logical_router_id: :class:`str` or ``None``
        :param logical_router_id: Logical router id
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  med: :class:`long` or ``None``
        :param med: BGP Multi Exit Discriminator attribute. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  neighbor_address: :class:`str` or ``None``
        :param neighbor_address: BGP neighbor peer IP address. format: ip
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  neighbor_id: :class:`str` or ``None``
        :param neighbor_id: BGP neighbor id
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  network: :class:`str` or ``None``
        :param network: CIDR network address. format: ip-cidr-block
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  next_hop: :class:`str` or ``None``
        :param next_hop: Next hop IP address. format: ip
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  source_address: :class:`str` or ``None``
        :param source_address: BGP neighbor source address. format: ip
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  transport_node_id: :class:`str` or ``None``
        :param transport_node_id: Transport node id
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  weight: :class:`long` or ``None``
        :param weight: BGP Weight attribute. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.as_path = as_path
        self.local_pref = local_pref
        self.logical_router_id = logical_router_id
        self.med = med
        self.neighbor_address = neighbor_address
        self.neighbor_id = neighbor_id
        self.network = network
        self.next_hop = next_hop
        self.source_address = source_address
        self.transport_node_id = transport_node_id
        self.weight = weight
        VapiStruct.__init__(self)


BgpNeighborRouteDetailsCsvRecord._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.bgp_neighbor_route_details_csv_record', {
        'as_path': type.OptionalType(type.StringType()),
        'local_pref': type.OptionalType(type.IntegerType()),
        'logical_router_id': type.OptionalType(type.StringType()),
        'med': type.OptionalType(type.IntegerType()),
        'neighbor_address': type.OptionalType(type.StringType()),
        'neighbor_id': type.OptionalType(type.StringType()),
        'network': type.OptionalType(type.StringType()),
        'next_hop': type.OptionalType(type.StringType()),
        'source_address': type.OptionalType(type.StringType()),
        'transport_node_id': type.OptionalType(type.StringType()),
        'weight': type.OptionalType(type.IntegerType()),
    },
    BgpNeighborRouteDetailsCsvRecord,
    False,
    None))



class BgpNeighborRouteDetailsInCsvFormat(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'file_name': 'file_name',
                            'results': 'results',
                            }

    def __init__(self,
                 file_name=None,
                 results=None,
                ):
        """
        :type  file_name: :class:`str` or ``None``
        :param file_name: File name set by HTTP server if API returns CSV result as a file.
        :type  results: :class:`list` of :class:`BgpNeighborRouteDetailsCsvRecord` or ``None``
        :param results: 
        """
        self.file_name = file_name
        self.results = results
        VapiStruct.__init__(self)


BgpNeighborRouteDetailsInCsvFormat._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.bgp_neighbor_route_details_in_csv_format', {
        'file_name': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'BgpNeighborRouteDetailsCsvRecord'))),
    },
    BgpNeighborRouteDetailsInCsvFormat,
    False,
    None))



class BgpNeighborRoutes(VapiStruct):
    """
    BGP neighbor learned/advertised route details.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'egde_node_routes': 'egde_node_routes',
                            'enforcement_point_path': 'enforcement_point_path',
                            'neighbor_path': 'neighbor_path',
                            }

    def __init__(self,
                 egde_node_routes=None,
                 enforcement_point_path=None,
                 neighbor_path=None,
                ):
        """
        :type  egde_node_routes: :class:`list` of :class:`RoutesPerTransportNode` or ``None``
        :param egde_node_routes: Array of BGP neighbor route details per edge node.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  enforcement_point_path: :class:`str` or ``None``
        :param enforcement_point_path: Enforcement point policy path
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  neighbor_path: :class:`str` or ``None``
        :param neighbor_path: BGP neighbor policy path
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.egde_node_routes = egde_node_routes
        self.enforcement_point_path = enforcement_point_path
        self.neighbor_path = neighbor_path
        VapiStruct.__init__(self)


BgpNeighborRoutes._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.bgp_neighbor_routes', {
        'egde_node_routes': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'RoutesPerTransportNode'))),
        'enforcement_point_path': type.OptionalType(type.StringType()),
        'neighbor_path': type.OptionalType(type.StringType()),
    },
    BgpNeighborRoutes,
    False,
    None))



class BgpNeighborRoutesListResult(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`BgpNeighborRoutes` or ``None``
        :param results: Paged Collection of Bgp neighbor routes.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


BgpNeighborRoutesListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.bgp_neighbor_routes_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'BgpNeighborRoutes'))),
    },
    BgpNeighborRoutesListResult,
    False,
    None))



class BgpRouteFiltering(VapiStruct):
    """
    Enable address_families and route filtering in each direction

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    ADDRESS_FAMILY_IPV4 = "IPV4"
    """


    """
    ADDRESS_FAMILY_IPV6 = "IPV6"
    """


    """
    ADDRESS_FAMILY_L2VPN_EVPN = "L2VPN_EVPN"
    """


    """



    _canonical_to_pep_names = {
                            'address_family': 'address_family',
                            'enabled': 'enabled',
                            'in_route_filters': 'in_route_filters',
                            'maximum_routes': 'maximum_routes',
                            'out_route_filters': 'out_route_filters',
                            }

    def __init__(self,
                 address_family=None,
                 enabled=None,
                 in_route_filters=None,
                 maximum_routes=None,
                 out_route_filters=None,
                ):
        """
        :type  address_family: :class:`str` or ``None``
        :param address_family: Possible values are: 
            
            * :attr:`BgpRouteFiltering.ADDRESS_FAMILY_IPV4`
            * :attr:`BgpRouteFiltering.ADDRESS_FAMILY_IPV6`
            * :attr:`BgpRouteFiltering.ADDRESS_FAMILY_L2VPN_EVPN`
            
            Address family type. If not configured, this property automatically
            derived for IPv4 & IPv6 peer configuration.
        :type  enabled: :class:`bool` or ``None``
        :param enabled: Flag to enable address family.
        :type  in_route_filters: :class:`list` of :class:`str` or ``None``
        :param in_route_filters: Specify path of prefix-list or route map to filter routes for IN
            direction.
        :type  maximum_routes: :class:`long` or ``None``
        :param maximum_routes: Maximum number of routes for the address family. format: int32
        :type  out_route_filters: :class:`list` of :class:`str` or ``None``
        :param out_route_filters: Specify path of prefix-list or route map to filter routes for OUT
            direction. When not specified, a built-in prefix-list named
            'prefixlist-out-default' is automatically applied.
        """
        self.address_family = address_family
        self.enabled = enabled
        self.in_route_filters = in_route_filters
        self.maximum_routes = maximum_routes
        self.out_route_filters = out_route_filters
        VapiStruct.__init__(self)


BgpRouteFiltering._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.bgp_route_filtering', {
        'address_family': type.OptionalType(type.StringType()),
        'enabled': type.OptionalType(type.BooleanType()),
        'in_route_filters': type.OptionalType(type.ListType(type.StringType())),
        'maximum_routes': type.OptionalType(type.IntegerType()),
        'out_route_filters': type.OptionalType(type.ListType(type.StringType())),
    },
    BgpRouteFiltering,
    False,
    None))



class BgpRoutingConfig(VapiStruct):
    """
    Contains BGP routing configuration.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'ecmp': 'ecmp',
                            'enabled': 'enabled',
                            'graceful_restart': 'graceful_restart',
                            'graceful_restart_config': 'graceful_restart_config',
                            'inter_sr_ibgp': 'inter_sr_ibgp',
                            'local_as_num': 'local_as_num',
                            'multipath_relax': 'multipath_relax',
                            'route_aggregations': 'route_aggregations',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 ecmp=None,
                 enabled=None,
                 graceful_restart=None,
                 graceful_restart_config=None,
                 inter_sr_ibgp=None,
                 local_as_num=None,
                 multipath_relax=None,
                 route_aggregations=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  ecmp: :class:`bool` or ``None``
        :param ecmp: Flag to enable ECMP.
        :type  enabled: :class:`bool` or ``None``
        :param enabled: Flag to enable BGP configuration. Disabling will stop feature and
            BGP peering.
        :type  graceful_restart: :class:`bool` or ``None``
        :param graceful_restart: Flag to enable graceful restart. This field is deprecated, please
            use graceful_restart_config parameter for graceful restart
            configuration. If both parameters are set and consistent with each
            other (i.e. graceful_restart=false and
            graceful_restart_mode=HELPER_ONLY OR graceful_restart=true and
            graceful_restart_mode=GR_AND_HELPER) then this is allowed, but if
            inconsistent with each other then this is not allowed and
            validation error will be thrown.
        :type  graceful_restart_config: :class:`BgpGracefulRestartConfig` or ``None``
        :param graceful_restart_config: Configuration field to hold BGP Restart mode and timer.
        :type  inter_sr_ibgp: :class:`bool` or ``None``
        :param inter_sr_ibgp: Flag to enable inter SR IBGP configuration. When not specified,
            inter SR IBGP is automatically enabled if Tier-0 is created in
            ACTIVE_ACTIVE ha_mode.
        :type  local_as_num: :class:`str` or ``None``
        :param local_as_num: Specify BGP AS number for Tier-0 to advertize to BGP peers. AS
            number can be specified in ASPLAIN (e.g., \"65546\") or ASDOT
            (e.g., \"1.10\") format. Empty string disables BGP feature. It is
            required by normal tier0 but not required in vrf tier0.
        :type  multipath_relax: :class:`bool` or ``None``
        :param multipath_relax: Flag to enable BGP multipath relax option.
        :type  route_aggregations: :class:`list` of :class:`RouteAggregationEntry` or ``None``
        :param route_aggregations: List of routes to be aggregated.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.ecmp = ecmp
        self.enabled = enabled
        self.graceful_restart = graceful_restart
        self.graceful_restart_config = graceful_restart_config
        self.inter_sr_ibgp = inter_sr_ibgp
        self.local_as_num = local_as_num
        self.multipath_relax = multipath_relax
        self.route_aggregations = route_aggregations
        VapiStruct.__init__(self)


BgpRoutingConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.bgp_routing_config', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'ecmp': type.OptionalType(type.BooleanType()),
        'enabled': type.OptionalType(type.BooleanType()),
        'graceful_restart': type.OptionalType(type.BooleanType()),
        'graceful_restart_config': type.OptionalType(type.ReferenceType(__name__, 'BgpGracefulRestartConfig')),
        'inter_sr_ibgp': type.OptionalType(type.BooleanType()),
        'local_as_num': type.OptionalType(type.StringType()),
        'multipath_relax': type.OptionalType(type.BooleanType()),
        'route_aggregations': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'RouteAggregationEntry'))),
    },
    BgpRoutingConfig,
    False,
    None))



class BinaryPacketData(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "BinaryPacketData"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'payload': 'payload',
                            'frame_size': 'frame_size',
                            'resource_type': 'resource_type',
                            'routed': 'routed',
                            'transport_type': 'transport_type',
                            }

    def __init__(self,
                 payload=None,
                 frame_size=None,
                 resource_type='BinaryPacketData',
                 routed=None,
                 transport_type=None,
                ):
        """
        :type  payload: :class:`str` or ``None``
        :param payload: Up to 1000 bytes of payload may be supplied (with a base64-encoded
            length of 1336 bytes.) Additional bytes of traceflow metadata will
            be appended to the payload. The payload must contain all headers
            (Ethernet, IP, etc). Note that VLAN is not supported in the logical
            space. Hence, payload must not contain 802.1Q headers.
        :type  frame_size: :class:`long` or ``None``
        :param frame_size: If the requested frame_size is too small (given the payload and
            traceflow metadata requirement of 16 bytes), the traceflow request
            will fail with an appropriate message. The frame will be zero
            padded to the requested size. format: int64
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`PacketData.RESOURCE_TYPE_BINARYPACKETDATA`
            * :attr:`PacketData.RESOURCE_TYPE_FIELDSPACKETDATA`
            
             Packet configuration
        :type  routed: :class:`bool` or ``None``
        :param routed: A flag, when set true, indicates that the traceflow packet is of L3
            routing.
        :type  transport_type: :class:`str` or ``None``
        :param transport_type: Possible values are: 
            
            * :attr:`PacketData.TRANSPORT_TYPE_BROADCAST`
            * :attr:`PacketData.TRANSPORT_TYPE_UNICAST`
            * :attr:`PacketData.TRANSPORT_TYPE_MULTICAST`
            * :attr:`PacketData.TRANSPORT_TYPE_UNKNOWN`
            
             transport type of the traceflow packet
        """
        self.payload = payload
        self.frame_size = frame_size
        self._resource_type = resource_type
        self.routed = routed
        self.transport_type = transport_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

BinaryPacketData._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.binary_packet_data', {
        'payload': type.OptionalType(type.StringType()),
        'frame_size': type.OptionalType(type.IntegerType()),
        'resource_type': type.StringType(),
        'routed': type.OptionalType(type.BooleanType()),
        'transport_type': type.OptionalType(type.StringType()),
    },
    BinaryPacketData,
    False,
    None))



class BridgeProfileConfig(VapiStruct):
    """
    configuration parameters for Bridge Profile

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'bridge_profile_path': 'bridge_profile_path',
                            'uplink_teaming_policy_name': 'uplink_teaming_policy_name',
                            'vlan_ids': 'vlan_ids',
                            'vlan_transport_zone_path': 'vlan_transport_zone_path',
                            }

    def __init__(self,
                 bridge_profile_path=None,
                 uplink_teaming_policy_name=None,
                 vlan_ids=None,
                 vlan_transport_zone_path=None,
                ):
        """
        :type  bridge_profile_path: :class:`str` or ``None``
        :param bridge_profile_path: Same bridge profile can be configured on different segments. Each
            bridge profile on a segment must unique.
        :type  uplink_teaming_policy_name: :class:`str` or ``None``
        :param uplink_teaming_policy_name: The name of the switching uplink teaming policy for the bridge
            endpoint. This name corresponds to one fot he switching uplink
            teaming policy names listed in teh transport zone. When this
            property is not specified, the teaming policy is assigned by MP.
        :type  vlan_ids: :class:`list` of :class:`str` or ``None``
        :param vlan_ids: VLAN specification for bridge endpoint. Either VLAN ID or VLAN
            ranges can be specified. Not both.
        :type  vlan_transport_zone_path: :class:`str` or ``None``
        :param vlan_transport_zone_path: VLAN transport zone should belong to the enforcment-point as the
            transport zone specified in the segment.
        """
        self.bridge_profile_path = bridge_profile_path
        self.uplink_teaming_policy_name = uplink_teaming_policy_name
        self.vlan_ids = vlan_ids
        self.vlan_transport_zone_path = vlan_transport_zone_path
        VapiStruct.__init__(self)


BridgeProfileConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.bridge_profile_config', {
        'bridge_profile_path': type.OptionalType(type.StringType()),
        'uplink_teaming_policy_name': type.OptionalType(type.StringType()),
        'vlan_ids': type.OptionalType(type.ListType(type.StringType())),
        'vlan_transport_zone_path': type.OptionalType(type.StringType()),
    },
    BridgeProfileConfig,
    False,
    None))



class ByodPolicyServiceInstance(VapiStruct):
    """
    Represents an instance of partner's service whose wiring will be done by
    partner itself. As partner does all the wiring, we call it as Byod - Bring
    your own device.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    DEPLOYMENT_MODE_STAND_ALONE = "STAND_ALONE"
    """


    """
    DEPLOYMENT_MODE_ACTIVE_STANDBY = "ACTIVE_STANDBY"
    """


    """
    TRANSPORT_TYPE_L2_BRIDGE = "L2_BRIDGE"
    """


    """
    TRANSPORT_TYPE_L3_ROUTED = "L3_ROUTED"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'deployment_mode': 'deployment_mode',
                            'partner_service_name': 'partner_service_name',
                            'transport_type': 'transport_type',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 deployment_mode=None,
                 partner_service_name=None,
                 transport_type=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  deployment_mode: :class:`str` or ``None``
        :param deployment_mode: Possible values are: 
            
            * :attr:`ByodPolicyServiceInstance.DEPLOYMENT_MODE_STAND_ALONE`
            * :attr:`ByodPolicyServiceInstance.DEPLOYMENT_MODE_ACTIVE_STANDBY`
            
            Deployment mode specifies how the partner appliance will be
            deployed i.e. in HA or standalone mode.
        :type  partner_service_name: :class:`str` or ``None``
        :param partner_service_name: Unique name of Partner Service in the Marketplace
        :type  transport_type: :class:`str` or ``None``
        :param transport_type: Possible values are: 
            
            * :attr:`ByodPolicyServiceInstance.TRANSPORT_TYPE_L2_BRIDGE`
            * :attr:`ByodPolicyServiceInstance.TRANSPORT_TYPE_L3_ROUTED`
            
             Transport to be used while deploying Service-VM.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.deployment_mode = deployment_mode
        self.partner_service_name = partner_service_name
        self.transport_type = transport_type
        VapiStruct.__init__(self)


ByodPolicyServiceInstance._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.byod_policy_service_instance', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'deployment_mode': type.OptionalType(type.StringType()),
        'partner_service_name': type.OptionalType(type.StringType()),
        'transport_type': type.OptionalType(type.StringType()),
    },
    ByodPolicyServiceInstance,
    False,
    None))



class ByodPolicyServiceInstanceListResult(VapiStruct):
    """
    Collection of only Byod SI objects

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`ByodPolicyServiceInstance` or ``None``
        :param results: Byod Service instance list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


ByodPolicyServiceInstanceListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.byod_policy_service_instance_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ByodPolicyServiceInstance'))),
    },
    ByodPolicyServiceInstanceListResult,
    False,
    None))



class ChildApplication(VapiStruct):
    """
    Child wrapper object for Application, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'Application': 'application',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 application=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  application: :class:`Application` or ``None``
        :param application: Contains the actual Application object
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.application = application
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildApplication._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_application', {
        'Application': type.OptionalType(type.ReferenceType(__name__, 'Application')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildApplication,
    False,
    None))



class ChildApplicationService(VapiStruct):
    """
    Child wrapper object for ApplicationService, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'ApplicationService': 'application_service',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 application_service=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  application_service: :class:`ApplicationService` or ``None``
        :param application_service: Contains the actual ApplicationService object
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.application_service = application_service
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildApplicationService._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_application_service', {
        'ApplicationService': type.OptionalType(type.ReferenceType(__name__, 'ApplicationService')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildApplicationService,
    False,
    None))



class ChildApplicationTier(VapiStruct):
    """
    Child wrapper object for ApplicationTier, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'ApplicationTier': 'application_tier',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 application_tier=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  application_tier: :class:`ApplicationTier` or ``None``
        :param application_tier: Contains the actual ApplicationTier object
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.application_tier = application_tier
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildApplicationTier._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_application_tier', {
        'ApplicationTier': type.OptionalType(type.ReferenceType(__name__, 'ApplicationTier')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildApplicationTier,
    False,
    None))



class ChildBfdProfile(VapiStruct):
    """
    Child wrapper for BfdProfile, used in hierarchical API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'BfdProfile': 'bfd_profile',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 bfd_profile=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  bfd_profile: :class:`BfdProfile` or ``None``
        :param bfd_profile: Contains the actual BfdProfile object.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.bfd_profile = bfd_profile
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildBfdProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_bfd_profile', {
        'BfdProfile': type.OptionalType(type.ReferenceType(__name__, 'BfdProfile')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildBfdProfile,
    False,
    None))



class ChildBgpNeighborConfig(VapiStruct):
    """
    Child wrapper object for BgpNeighborConfig, used in hierarchical API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'BgpNeighborConfig': 'bgp_neighbor_config',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 bgp_neighbor_config=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  bgp_neighbor_config: :class:`BgpNeighborConfig` or ``None``
        :param bgp_neighbor_config: Contains the actual BgpNeighborConfig object.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.bgp_neighbor_config = bgp_neighbor_config
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildBgpNeighborConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_bgp_neighbor_config', {
        'BgpNeighborConfig': type.OptionalType(type.ReferenceType(__name__, 'BgpNeighborConfig')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildBgpNeighborConfig,
    False,
    None))



class ChildBgpRoutingConfig(VapiStruct):
    """
    Child wrapper object for BgpRoutingConfig, used in hierarchical API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'BgpRoutingConfig': 'bgp_routing_config',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 bgp_routing_config=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  bgp_routing_config: :class:`BgpRoutingConfig` or ``None``
        :param bgp_routing_config: Contains the actual BgpRoutingConfig object.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.bgp_routing_config = bgp_routing_config
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildBgpRoutingConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_bgp_routing_config', {
        'BgpRoutingConfig': type.OptionalType(type.ReferenceType(__name__, 'BgpRoutingConfig')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildBgpRoutingConfig,
    False,
    None))



class ChildByodPolicyServiceInstance(VapiStruct):
    """
    Child wrapper object for ByodPolicyServiceInstance used in hierarchical
    API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'ByodPolicyServiceInstance': 'byod_policy_service_instance',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 byod_policy_service_instance=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  byod_policy_service_instance: :class:`ByodPolicyServiceInstance` or ``None``
        :param byod_policy_service_instance: Contains actual ByodPolicyServiceInstance.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.byod_policy_service_instance = byod_policy_service_instance
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildByodPolicyServiceInstance._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_byod_policy_service_instance', {
        'ByodPolicyServiceInstance': type.OptionalType(type.ReferenceType(__name__, 'ByodPolicyServiceInstance')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildByodPolicyServiceInstance,
    False,
    None))



class ChildCommunicationEntry(VapiStruct):
    """
    Child wrapper object for CommunicationEntry, used in hierarchical API This
    type is deprecated. Use the type ChildRule instead.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'CommunicationEntry': 'communication_entry',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 communication_entry=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  communication_entry: :class:`CommunicationEntry` or ``None``
        :param communication_entry: Contains the actual CommunicationEntry object.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.communication_entry = communication_entry
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildCommunicationEntry._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_communication_entry', {
        'CommunicationEntry': type.OptionalType(type.ReferenceType(__name__, 'CommunicationEntry')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildCommunicationEntry,
    False,
    None))



class ChildCommunicationMap(VapiStruct):
    """
    Child wrapper object for CommunicationMap, used in hierarchical API This
    type is deprecated. Use the type ChildSecurityPolicy instead.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'CommunicationMap': 'communication_map',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 communication_map=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  communication_map: :class:`CommunicationMap` or ``None``
        :param communication_map: Contains the actual CommunicationMap object.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.communication_map = communication_map
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildCommunicationMap._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_communication_map', {
        'CommunicationMap': type.OptionalType(type.ReferenceType(__name__, 'CommunicationMap')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildCommunicationMap,
    False,
    None))



class ChildCommunityList(VapiStruct):
    """
    Child wrapper object for CommunityList, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'CommunityList': 'community_list',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 community_list=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  community_list: :class:`CommunityList` or ``None``
        :param community_list: Contains the actual CommunityList object
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.community_list = community_list
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildCommunityList._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_community_list', {
        'CommunityList': type.OptionalType(type.ReferenceType(__name__, 'CommunityList')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildCommunityList,
    False,
    None))



class ChildComputeClusterIdfwConfiguration(VapiStruct):
    """
    Wrapper object for ComputeClusterIdfwConfiguration

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'ComputeClusterIdfwConfiguration': 'compute_cluster_idfw_configuration',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 compute_cluster_idfw_configuration=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  compute_cluster_idfw_configuration: :class:`ComputeClusterIdfwConfiguration` or ``None``
        :param compute_cluster_idfw_configuration: Contains the actual compute cluster idfw configuration object.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.compute_cluster_idfw_configuration = compute_cluster_idfw_configuration
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildComputeClusterIdfwConfiguration._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_compute_cluster_idfw_configuration', {
        'ComputeClusterIdfwConfiguration': type.OptionalType(type.ReferenceType(__name__, 'ComputeClusterIdfwConfiguration')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildComputeClusterIdfwConfiguration,
    False,
    None))



class ChildConstraint(VapiStruct):
    """
    Child wrapper object for Constraint, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'Constraint': 'constraint',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 constraint=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  constraint: :class:`Constraint` or ``None``
        :param constraint: Contains the actual Constraint object
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.constraint = constraint
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildConstraint._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_constraint', {
        'Constraint': type.OptionalType(type.ReferenceType(__name__, 'Constraint')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildConstraint,
    False,
    None))



class ChildDeploymentZone(VapiStruct):
    """
    Child wrapper object for DeploymentZone, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'DeploymentZone': 'deployment_zone',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 deployment_zone=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  deployment_zone: :class:`DeploymentZone` or ``None``
        :param deployment_zone: Contains the actual DeploymentZone object
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.deployment_zone = deployment_zone
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildDeploymentZone._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_deployment_zone', {
        'DeploymentZone': type.OptionalType(type.ReferenceType(__name__, 'DeploymentZone')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildDeploymentZone,
    False,
    None))



class ChildDfwFirewallConfiguration(VapiStruct):
    """
    Wrapper object for FirewallConfiguration

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'DfwFirewallConfiguration': 'dfw_firewall_configuration',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 dfw_firewall_configuration=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  dfw_firewall_configuration: :class:`DfwFirewallConfiguration` or ``None``
        :param dfw_firewall_configuration: Contains the actual dfw firewall configuration list object.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.dfw_firewall_configuration = dfw_firewall_configuration
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildDfwFirewallConfiguration._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_dfw_firewall_configuration', {
        'DfwFirewallConfiguration': type.OptionalType(type.ReferenceType(__name__, 'DfwFirewallConfiguration')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildDfwFirewallConfiguration,
    False,
    None))



class ChildDhcpRelayConfig(VapiStruct):
    """
    Child wrapper object for DhcpRelayConfig, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'DhcpRelayConfig': 'dhcp_relay_config',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 dhcp_relay_config=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  dhcp_relay_config: :class:`DhcpRelayConfig` or ``None``
        :param dhcp_relay_config: Contains the actual DhcpRelayConfig object
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.dhcp_relay_config = dhcp_relay_config
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildDhcpRelayConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_dhcp_relay_config', {
        'DhcpRelayConfig': type.OptionalType(type.ReferenceType(__name__, 'DhcpRelayConfig')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildDhcpRelayConfig,
    False,
    None))



class ChildDhcpServerConfig(VapiStruct):
    """
    Child wrapper object for DhcpServerConfig, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'DhcpServerConfig': 'dhcp_server_config',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 dhcp_server_config=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  dhcp_server_config: :class:`DhcpServerConfig` or ``None``
        :param dhcp_server_config: Contains the actual DhcpServerConfig object
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.dhcp_server_config = dhcp_server_config
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildDhcpServerConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_dhcp_server_config', {
        'DhcpServerConfig': type.OptionalType(type.ReferenceType(__name__, 'DhcpServerConfig')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildDhcpServerConfig,
    False,
    None))



class ChildDhcpStaticBindingConfig(VapiStruct):
    """
    Child wrapper for DhcpStaticBindingConfig, used in hierarchical API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'DhcpStaticBindingConfig': 'dhcp_static_binding_config',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 dhcp_static_binding_config=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  dhcp_static_binding_config: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param dhcp_static_binding_config: Contains the actual DhcpStaticBindingConfig object.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`DhcpStaticBindingConfig`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`DhcpStaticBindingConfig`.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.dhcp_static_binding_config = dhcp_static_binding_config
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildDhcpStaticBindingConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_dhcp_static_binding_config', {
        'DhcpStaticBindingConfig': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'DhcpStaticBindingConfig')])),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildDhcpStaticBindingConfig,
    False,
    None))



class ChildDnsSecurityProfile(VapiStruct):
    """
    Child wrapper object for DnsSecurityProfile, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'DnsSecurityProfile': 'dns_security_profile',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 dns_security_profile=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  dns_security_profile: :class:`DnsSecurityProfile` or ``None``
        :param dns_security_profile: Contains the actual DnsSecurityProfile object
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.dns_security_profile = dns_security_profile
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildDnsSecurityProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_dns_security_profile', {
        'DnsSecurityProfile': type.OptionalType(type.ReferenceType(__name__, 'DnsSecurityProfile')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildDnsSecurityProfile,
    False,
    None))



class ChildDnsSecurityProfileBindingMap(VapiStruct):
    """
    Child wrapper obejct for DnsSecurityProfileBindingMap used in hierarchical
    API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'DnsSecurityProfileBindingMap': 'dns_security_profile_binding_map',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 dns_security_profile_binding_map=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  dns_security_profile_binding_map: :class:`DnsSecurityProfileBindingMap` or ``None``
        :param dns_security_profile_binding_map: Contains the actual DnsSecurityProfileBindingMap object
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.dns_security_profile_binding_map = dns_security_profile_binding_map
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildDnsSecurityProfileBindingMap._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_dns_security_profile_binding_map', {
        'DnsSecurityProfileBindingMap': type.OptionalType(type.ReferenceType(__name__, 'DnsSecurityProfileBindingMap')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildDnsSecurityProfileBindingMap,
    False,
    None))



class ChildDomain(VapiStruct):
    """
    Child wrapper object for domain, used in hierarchical API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'Domain': 'domain',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 domain=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  domain: :class:`Domain` or ``None``
        :param domain: Contains the actual domain object.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.domain = domain
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildDomain._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_domain', {
        'Domain': type.OptionalType(type.ReferenceType(__name__, 'Domain')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildDomain,
    False,
    None))



class ChildDomainDeploymentMap(VapiStruct):
    """
    Child wrapper object for DomainDeploymentMap, used in hierarchical API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'DomainDeploymentMap': 'domain_deployment_map',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 domain_deployment_map=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  domain_deployment_map: :class:`DomainDeploymentMap` or ``None``
        :param domain_deployment_map: Contains the actual DomainDeploymentMap object.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.domain_deployment_map = domain_deployment_map
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildDomainDeploymentMap._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_domain_deployment_map', {
        'DomainDeploymentMap': type.OptionalType(type.ReferenceType(__name__, 'DomainDeploymentMap')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildDomainDeploymentMap,
    False,
    None))



class ChildEndpointPolicy(VapiStruct):
    """
    Child wrapper object for EndpointPolicy used in hierarchical API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'EndpointPolicy': 'endpoint_policy',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 endpoint_policy=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  endpoint_policy: :class:`EndpointPolicy` or ``None``
        :param endpoint_policy: Contains actual EndpointPolicy.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.endpoint_policy = endpoint_policy
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildEndpointPolicy._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_endpoint_policy', {
        'EndpointPolicy': type.OptionalType(type.ReferenceType(__name__, 'EndpointPolicy')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildEndpointPolicy,
    False,
    None))



class ChildEndpointRule(VapiStruct):
    """
    Child wrapper object for EndpointRule used in hierarchical API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'EndpointRule': 'endpoint_rule',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 endpoint_rule=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  endpoint_rule: :class:`EndpointRule` or ``None``
        :param endpoint_rule: Contains actual EndpointRule.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.endpoint_rule = endpoint_rule
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildEndpointRule._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_endpoint_rule', {
        'EndpointRule': type.OptionalType(type.ReferenceType(__name__, 'EndpointRule')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildEndpointRule,
    False,
    None))



class ChildEnforcementPoint(VapiStruct):
    """
    Child wrapper object for EnforcementPoint, used in hierarchical API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'EnforcementPoint': 'enforcement_point',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 enforcement_point=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  enforcement_point: :class:`EnforcementPoint` or ``None``
        :param enforcement_point: Contains the actual Enforcement point object.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.enforcement_point = enforcement_point
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildEnforcementPoint._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_enforcement_point', {
        'EnforcementPoint': type.OptionalType(type.ReferenceType(__name__, 'EnforcementPoint')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildEnforcementPoint,
    False,
    None))



class ChildEvpnConfig(VapiStruct):
    """
    Child wrapper object for EvpnConfig, used in hierarchical API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'EvpnConfig': 'evpn_config',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 evpn_config=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  evpn_config: :class:`EvpnConfig` or ``None``
        :param evpn_config: Contains the actual EvpnConfig object.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.evpn_config = evpn_config
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildEvpnConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_evpn_config', {
        'EvpnConfig': type.OptionalType(type.ReferenceType(__name__, 'EvpnConfig')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildEvpnConfig,
    False,
    None))



class ChildEvpnTunnelEndpointConfig(VapiStruct):
    """
    Child wrapper object for EvpnTunnelEndpointConfig, used in hierarchical
    API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'EvpnTunnelEndpointConfig': 'evpn_tunnel_endpoint_config',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 evpn_tunnel_endpoint_config=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  evpn_tunnel_endpoint_config: :class:`EvpnTunnelEndpointConfig` or ``None``
        :param evpn_tunnel_endpoint_config: Contains the actual EvpnTunnelEndpointConfig object.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.evpn_tunnel_endpoint_config = evpn_tunnel_endpoint_config
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildEvpnTunnelEndpointConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_evpn_tunnel_endpoint_config', {
        'EvpnTunnelEndpointConfig': type.OptionalType(type.ReferenceType(__name__, 'EvpnTunnelEndpointConfig')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildEvpnTunnelEndpointConfig,
    False,
    None))



class ChildFirewallIdentityStore(VapiStruct):
    """
    Child wrapper for FirewallIdentityStore, used in hierarchical API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'FirewallIdentityStore': 'firewall_identity_store',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 firewall_identity_store=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  firewall_identity_store: :class:`FirewallIdentityStore` or ``None``
        :param firewall_identity_store: Contains the actual FirewallIdentityStore object.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.firewall_identity_store = firewall_identity_store
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildFirewallIdentityStore._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_firewall_identity_store', {
        'FirewallIdentityStore': type.OptionalType(type.ReferenceType(__name__, 'FirewallIdentityStore')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildFirewallIdentityStore,
    False,
    None))



class ChildFloodProtectionProfile(VapiStruct):
    """
    Child wrapper object for FloodProtectionProfile, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'FloodProtectionProfile': 'flood_protection_profile',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 flood_protection_profile=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  flood_protection_profile: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param flood_protection_profile: Contains the actual FloodProtectionProfile object
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`FloodProtectionProfile`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`FloodProtectionProfile`.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.flood_protection_profile = flood_protection_profile
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildFloodProtectionProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_flood_protection_profile', {
        'FloodProtectionProfile': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'FloodProtectionProfile')])),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildFloodProtectionProfile,
    False,
    None))



class ChildFloodProtectionProfileBindingMap(VapiStruct):
    """
    Child wrapper object for FloodProtectionProfileBindingMap, used in
    hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'FloodProtectionProfileBindingMap': 'flood_protection_profile_binding_map',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 flood_protection_profile_binding_map=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  flood_protection_profile_binding_map: :class:`FloodProtectionProfileBindingMap` or ``None``
        :param flood_protection_profile_binding_map: Contains the actual FloodProtectionProfileBindingMap object
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.flood_protection_profile_binding_map = flood_protection_profile_binding_map
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildFloodProtectionProfileBindingMap._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_flood_protection_profile_binding_map', {
        'FloodProtectionProfileBindingMap': type.OptionalType(type.ReferenceType(__name__, 'FloodProtectionProfileBindingMap')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildFloodProtectionProfileBindingMap,
    False,
    None))



class ChildForwardingPolicy(VapiStruct):
    """
    Child wrapper object for ForwardingPolicy used in Hierarchical API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'ForwardingPolicy': 'forwarding_policy',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 forwarding_policy=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  forwarding_policy: :class:`ForwardingPolicy` or ``None``
        :param forwarding_policy: Contains actual ForwardingPolicy.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.forwarding_policy = forwarding_policy
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildForwardingPolicy._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_forwarding_policy', {
        'ForwardingPolicy': type.OptionalType(type.ReferenceType(__name__, 'ForwardingPolicy')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildForwardingPolicy,
    False,
    None))



class ChildForwardingRule(VapiStruct):
    """
    Child wrapper object for ForwardingRule used in Hierarchical API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'ForwardingRule': 'forwarding_rule',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 forwarding_rule=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  forwarding_rule: :class:`ForwardingRule` or ``None``
        :param forwarding_rule: Contains actual ForwardingRule.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.forwarding_rule = forwarding_rule
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildForwardingRule._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_forwarding_rule', {
        'ForwardingRule': type.OptionalType(type.ReferenceType(__name__, 'ForwardingRule')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildForwardingRule,
    False,
    None))



class ChildGatewayPolicy(VapiStruct):
    """
    Child wrapper object for GatewayPolicy, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'GatewayPolicy': 'gateway_policy',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 gateway_policy=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  gateway_policy: :class:`GatewayPolicy` or ``None``
        :param gateway_policy: Contains the actual GatewayPolicy object
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.gateway_policy = gateway_policy
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildGatewayPolicy._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_gateway_policy', {
        'GatewayPolicy': type.OptionalType(type.ReferenceType(__name__, 'GatewayPolicy')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildGatewayPolicy,
    False,
    None))



class ChildGatewayQosProfile(VapiStruct):
    """
    Child wrapper for GatewayQosProfile, used in hierarchical API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'QosProfile': 'qos_profile',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 qos_profile=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  qos_profile: :class:`GatewayQosProfile` or ``None``
        :param qos_profile: Contains the actual GatewayQosProfile object.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.qos_profile = qos_profile
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildGatewayQosProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_gateway_qos_profile', {
        'QosProfile': type.OptionalType(type.ReferenceType(__name__, 'GatewayQosProfile')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildGatewayQosProfile,
    False,
    None))



class ChildGlobalConfig(VapiStruct):
    """
    Child wrapper object for GlobalConfig, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'GlobalConfig': 'global_config',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 global_config=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  global_config: :class:`GlobalConfig` or ``None``
        :param global_config: Contains the actual GlobalConfig object.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.global_config = global_config
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildGlobalConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_global_config', {
        'GlobalConfig': type.OptionalType(type.ReferenceType(__name__, 'GlobalConfig')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildGlobalConfig,
    False,
    None))



class ChildGlobalManager(VapiStruct):
    """
    Child wrapper object for Global Manager, used in hierarchical API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'GlobalManager': 'global_manager',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 global_manager=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  global_manager: :class:`GlobalManager` or ``None``
        :param global_manager: Contains the actual Global Manager object.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.global_manager = global_manager
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildGlobalManager._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_global_manager', {
        'GlobalManager': type.OptionalType(type.ReferenceType(__name__, 'GlobalManager')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildGlobalManager,
    False,
    None))



class ChildGroup(VapiStruct):
    """
    Child wrapper object for group, used in hierarchical API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'Group': 'group',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 group=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  group: :class:`Group` or ``None``
        :param group: Contains the actual group objects.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.group = group
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildGroup._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_group', {
        'Group': type.OptionalType(type.ReferenceType(__name__, 'Group')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildGroup,
    False,
    None))



class ChildGroupDiscoveryProfileBindingMap(VapiStruct):
    """
    Child wrapper obejct for GroupDiscoveryProfileBindingMap used in
    hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'GroupDiscoveryProfileBindingMap': 'group_discovery_profile_binding_map',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 group_discovery_profile_binding_map=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  group_discovery_profile_binding_map: :class:`GroupDiscoveryProfileBindingMap` or ``None``
        :param group_discovery_profile_binding_map: Contains the actual GroupDiscoveryProfileBindingMap object
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.group_discovery_profile_binding_map = group_discovery_profile_binding_map
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildGroupDiscoveryProfileBindingMap._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_group_discovery_profile_binding_map', {
        'GroupDiscoveryProfileBindingMap': type.OptionalType(type.ReferenceType(__name__, 'GroupDiscoveryProfileBindingMap')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildGroupDiscoveryProfileBindingMap,
    False,
    None))



class ChildGroupMonitoringProfileBindingMap(VapiStruct):
    """
    Child wrapper object for GroupMonitoringProfileBindingMap, used in
    hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'GroupMonitoringProfileBindingMap': 'group_monitoring_profile_binding_map',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 group_monitoring_profile_binding_map=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  group_monitoring_profile_binding_map: :class:`GroupMonitoringProfileBindingMap` or ``None``
        :param group_monitoring_profile_binding_map: Contains the actual GroupMonitoringProfileBindingMap object
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.group_monitoring_profile_binding_map = group_monitoring_profile_binding_map
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildGroupMonitoringProfileBindingMap._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_group_monitoring_profile_binding_map', {
        'GroupMonitoringProfileBindingMap': type.OptionalType(type.ReferenceType(__name__, 'GroupMonitoringProfileBindingMap')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildGroupMonitoringProfileBindingMap,
    False,
    None))



class ChildIPDiscoveryProfile(VapiStruct):
    """
    Child wrapper object for IPDiscoveryProfile, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'IPDiscoveryProfile': 'ip_discovery_profile',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 ip_discovery_profile=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  ip_discovery_profile: :class:`IPDiscoveryProfile` or ``None``
        :param ip_discovery_profile: Contains the actual IPDiscoveryProfile object
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.ip_discovery_profile = ip_discovery_profile
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildIPDiscoveryProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_IP_discovery_profile', {
        'IPDiscoveryProfile': type.OptionalType(type.ReferenceType(__name__, 'IPDiscoveryProfile')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildIPDiscoveryProfile,
    False,
    None))



class ChildIPFIXDFWCollectorProfile(VapiStruct):
    """
    Child wrapper object for IPFIXDFWCollectorProfile, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'IPFIXDFWCollectorProfile': 'i_pfixdfw_collector_profile',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 i_pfixdfw_collector_profile=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  i_pfixdfw_collector_profile: :class:`IPFIXDFWCollectorProfile` or ``None``
        :param i_pfixdfw_collector_profile: Contains the actual IPFIXDFWCollectorProfile object
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.i_pfixdfw_collector_profile = i_pfixdfw_collector_profile
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildIPFIXDFWCollectorProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_IPFIXDFW_collector_profile', {
        'IPFIXDFWCollectorProfile': type.OptionalType(type.ReferenceType(__name__, 'IPFIXDFWCollectorProfile')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildIPFIXDFWCollectorProfile,
    False,
    None))



class ChildIPFIXDFWProfile(VapiStruct):
    """
    Child wrapper object for IPFIXDFWProfile, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'IPFIXDFWProfile': 'i_pfixdfw_profile',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 i_pfixdfw_profile=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  i_pfixdfw_profile: :class:`IPFIXDFWProfile` or ``None``
        :param i_pfixdfw_profile: Contains the actual IPFIXDFWProfile object
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.i_pfixdfw_profile = i_pfixdfw_profile
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildIPFIXDFWProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_IPFIXDFW_profile', {
        'IPFIXDFWProfile': type.OptionalType(type.ReferenceType(__name__, 'IPFIXDFWProfile')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildIPFIXDFWProfile,
    False,
    None))



class ChildIPFIXL2CollectorProfile(VapiStruct):
    """
    Child wrapper object for IPFIXL2CollectorProfile, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'IPFIXL2CollectorProfile': 'i_pfix_l2_collector_profile',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 i_pfix_l2_collector_profile=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  i_pfix_l2_collector_profile: :class:`IPFIXL2CollectorProfile` or ``None``
        :param i_pfix_l2_collector_profile: Contains the actual IPFIXL2CollectorProfile object
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.i_pfix_l2_collector_profile = i_pfix_l2_collector_profile
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildIPFIXL2CollectorProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_IPFIX_l2_collector_profile', {
        'IPFIXL2CollectorProfile': type.OptionalType(type.ReferenceType(__name__, 'IPFIXL2CollectorProfile')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildIPFIXL2CollectorProfile,
    False,
    None))



class ChildIPFIXL2Profile(VapiStruct):
    """
    Child wrapper object for IPFIXL2Profile, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'IPFIXL2Profile': 'i_pfix_l2_profile',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 i_pfix_l2_profile=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  i_pfix_l2_profile: :class:`IPFIXL2Profile` or ``None``
        :param i_pfix_l2_profile: Contains the actual IPFIXL2Profile object
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.i_pfix_l2_profile = i_pfix_l2_profile
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildIPFIXL2Profile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_IPFIX_l2_profile', {
        'IPFIXL2Profile': type.OptionalType(type.ReferenceType(__name__, 'IPFIXL2Profile')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildIPFIXL2Profile,
    False,
    None))



class ChildIPSecVpnDpdProfile(VapiStruct):
    """
    Child wrapper object for IPSecVpnDpdProfile, used in hierarchical API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'IPSecVpnDpdProfile': 'ip_sec_vpn_dpd_profile',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 ip_sec_vpn_dpd_profile=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  ip_sec_vpn_dpd_profile: :class:`IPSecVpnDpdProfile` or ``None``
        :param ip_sec_vpn_dpd_profile: Contains the actual IPSecVpnDpdProfile object.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.ip_sec_vpn_dpd_profile = ip_sec_vpn_dpd_profile
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildIPSecVpnDpdProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_IP_sec_vpn_dpd_profile', {
        'IPSecVpnDpdProfile': type.OptionalType(type.ReferenceType(__name__, 'IPSecVpnDpdProfile')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildIPSecVpnDpdProfile,
    False,
    None))



class ChildIPSecVpnIkeProfile(VapiStruct):
    """
    Child wrapper object for IPSecVpnIkeProfile, used in hierarchical API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'IPSecVpnIkeProfile': 'ip_sec_vpn_ike_profile',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 ip_sec_vpn_ike_profile=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  ip_sec_vpn_ike_profile: :class:`IPSecVpnIkeProfile` or ``None``
        :param ip_sec_vpn_ike_profile: Contains the actual IPSecVpnIkeProfile object.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.ip_sec_vpn_ike_profile = ip_sec_vpn_ike_profile
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildIPSecVpnIkeProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_IP_sec_vpn_ike_profile', {
        'IPSecVpnIkeProfile': type.OptionalType(type.ReferenceType(__name__, 'IPSecVpnIkeProfile')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildIPSecVpnIkeProfile,
    False,
    None))



class ChildIPSecVpnLocalEndpoint(VapiStruct):
    """
    Child wrapper object for IPSecVpnLocalEndpoint, used in hierarchical API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'IPSecVpnLocalEndpoint': 'ip_sec_vpn_local_endpoint',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 ip_sec_vpn_local_endpoint=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  ip_sec_vpn_local_endpoint: :class:`IPSecVpnLocalEndpoint` or ``None``
        :param ip_sec_vpn_local_endpoint: Contains the actual IPSecVpnLocalEndpoint object.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.ip_sec_vpn_local_endpoint = ip_sec_vpn_local_endpoint
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildIPSecVpnLocalEndpoint._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_IP_sec_vpn_local_endpoint', {
        'IPSecVpnLocalEndpoint': type.OptionalType(type.ReferenceType(__name__, 'IPSecVpnLocalEndpoint')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildIPSecVpnLocalEndpoint,
    False,
    None))



class ChildIPSecVpnService(VapiStruct):
    """
    Child wrapper object for IPSecVpnService, used in hierarchical API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'IPSecVpnService': 'ip_sec_vpn_service',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 ip_sec_vpn_service=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  ip_sec_vpn_service: :class:`IPSecVpnService` or ``None``
        :param ip_sec_vpn_service: Contains the actual IPSecVpnService object.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.ip_sec_vpn_service = ip_sec_vpn_service
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildIPSecVpnService._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_IP_sec_vpn_service', {
        'IPSecVpnService': type.OptionalType(type.ReferenceType(__name__, 'IPSecVpnService')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildIPSecVpnService,
    False,
    None))



class ChildIPSecVpnSession(VapiStruct):
    """
    Child wrapper object for IPSecVpnSession, used in hierarchical API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'IPSecVpnSession': 'ip_sec_vpn_session',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 ip_sec_vpn_session=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  ip_sec_vpn_session: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param ip_sec_vpn_session: Contains the actual IPSecVpnSession object.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`IPSecVpnSession`. When methods return a value of this class
            as a return value, the attribute will contain all the attributes
            defined in :class:`IPSecVpnSession`.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.ip_sec_vpn_session = ip_sec_vpn_session
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildIPSecVpnSession._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_IP_sec_vpn_session', {
        'IPSecVpnSession': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'IPSecVpnSession')])),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildIPSecVpnSession,
    False,
    None))



class ChildIPSecVpnTunnelProfile(VapiStruct):
    """
    Child wrapper object for IPSecVpnTunnelProfile, used in hierarchical API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'IPSecVpnTunnelProfile': 'ip_sec_vpn_tunnel_profile',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 ip_sec_vpn_tunnel_profile=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  ip_sec_vpn_tunnel_profile: :class:`IPSecVpnTunnelProfile` or ``None``
        :param ip_sec_vpn_tunnel_profile: Contains the actual IPSecVpnTunnelProfile object
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.ip_sec_vpn_tunnel_profile = ip_sec_vpn_tunnel_profile
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildIPSecVpnTunnelProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_IP_sec_vpn_tunnel_profile', {
        'IPSecVpnTunnelProfile': type.OptionalType(type.ReferenceType(__name__, 'IPSecVpnTunnelProfile')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildIPSecVpnTunnelProfile,
    False,
    None))



class ChildIdsClusterConfig(VapiStruct):
    """
    Child wrapper object for IdsClusterConfig, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'IdsClusterConfig': 'ids_cluster_config',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 ids_cluster_config=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  ids_cluster_config: :class:`IdsClusterConfig` or ``None``
        :param ids_cluster_config: Contains the IdsClusterConfig object
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.ids_cluster_config = ids_cluster_config
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildIdsClusterConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_ids_cluster_config', {
        'IdsClusterConfig': type.OptionalType(type.ReferenceType(__name__, 'IdsClusterConfig')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildIdsClusterConfig,
    False,
    None))



class ChildIdsProfile(VapiStruct):
    """
    Child wrapper object for IdsProfile, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'IdsProfile': 'ids_profile',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 ids_profile=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  ids_profile: :class:`IdsProfile` or ``None``
        :param ids_profile: Contains the IdsProfile object
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.ids_profile = ids_profile
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildIdsProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_ids_profile', {
        'IdsProfile': type.OptionalType(type.ReferenceType(__name__, 'IdsProfile')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildIdsProfile,
    False,
    None))



class ChildIdsRule(VapiStruct):
    """
    Child wrapper object for IdsRule, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'IdsRule': 'ids_rule',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 ids_rule=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  ids_rule: :class:`IdsRule` or ``None``
        :param ids_rule: Contains the IdsRule object
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.ids_rule = ids_rule
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildIdsRule._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_ids_rule', {
        'IdsRule': type.OptionalType(type.ReferenceType(__name__, 'IdsRule')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildIdsRule,
    False,
    None))



class ChildIdsSecurityPolicy(VapiStruct):
    """
    Child wrapper object for IdsSecurityPolicy, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'IdsSecurityPolicy': 'ids_security_policy',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 ids_security_policy=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  ids_security_policy: :class:`IdsSecurityPolicy` or ``None``
        :param ids_security_policy: Contains the IdsSecurityPolicy object
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.ids_security_policy = ids_security_policy
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildIdsSecurityPolicy._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_ids_security_policy', {
        'IdsSecurityPolicy': type.OptionalType(type.ReferenceType(__name__, 'IdsSecurityPolicy')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildIdsSecurityPolicy,
    False,
    None))



class ChildIdsSignature(VapiStruct):
    """
    Child wrapper object for IdsSignature, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'IdsSignature': 'ids_signature',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 ids_signature=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  ids_signature: :class:`IdsSignature` or ``None``
        :param ids_signature: Contains the IdsSignature object
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.ids_signature = ids_signature
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildIdsSignature._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_ids_signature', {
        'IdsSignature': type.OptionalType(type.ReferenceType(__name__, 'IdsSignature')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildIdsSignature,
    False,
    None))



class ChildIdsStandaloneHostConfig(VapiStruct):
    """
    Child wrapper object for IdsStandaloneHostConfig, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'IdsStandaloneHostConfig': 'ids_standalone_host_config',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 ids_standalone_host_config=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  ids_standalone_host_config: :class:`IdsStandaloneHostConfig` or ``None``
        :param ids_standalone_host_config: Contains the IdsStandaloneHostConfig object
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.ids_standalone_host_config = ids_standalone_host_config
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildIdsStandaloneHostConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_ids_standalone_host_config', {
        'IdsStandaloneHostConfig': type.OptionalType(type.ReferenceType(__name__, 'IdsStandaloneHostConfig')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildIdsStandaloneHostConfig,
    False,
    None))



class ChildIpAddressAllocation(VapiStruct):
    """
    Child wrapper object for IpAddressAllocation, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'IpAddressAllocation': 'ip_address_allocation',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 ip_address_allocation=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  ip_address_allocation: :class:`IpAddressAllocation` or ``None``
        :param ip_address_allocation: Contains the actual IpAddressAllocation object
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.ip_address_allocation = ip_address_allocation
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildIpAddressAllocation._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_ip_address_allocation', {
        'IpAddressAllocation': type.OptionalType(type.ReferenceType(__name__, 'IpAddressAllocation')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildIpAddressAllocation,
    False,
    None))



class ChildIpAddressBlock(VapiStruct):
    """
    Child wrapper object for IpAddressBlock, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'IpAddressBlock': 'ip_address_block',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 ip_address_block=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  ip_address_block: :class:`IpAddressBlock` or ``None``
        :param ip_address_block: Contains the actual IpAddressBlock object
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.ip_address_block = ip_address_block
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildIpAddressBlock._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_ip_address_block', {
        'IpAddressBlock': type.OptionalType(type.ReferenceType(__name__, 'IpAddressBlock')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildIpAddressBlock,
    False,
    None))



class ChildIpAddressPool(VapiStruct):
    """
    Child wrapper object for IpAddressPool, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'IpAddressPool': 'ip_address_pool',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 ip_address_pool=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  ip_address_pool: :class:`IpAddressPool` or ``None``
        :param ip_address_pool: Contains the actual IpAddressPool object
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.ip_address_pool = ip_address_pool
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildIpAddressPool._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_ip_address_pool', {
        'IpAddressPool': type.OptionalType(type.ReferenceType(__name__, 'IpAddressPool')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildIpAddressPool,
    False,
    None))



class ChildIpAddressPoolSubnet(VapiStruct):
    """
    Child wrapper object for IpAddressPoolSubnet, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'IpAddressPoolSubnet': 'ip_address_pool_subnet',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 ip_address_pool_subnet=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  ip_address_pool_subnet: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param ip_address_pool_subnet: Contains the actual IpAddressPoolSubnet object
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`IpAddressPoolSubnet`. When methods return a value of this
            class as a return value, the attribute will contain all the
            attributes defined in :class:`IpAddressPoolSubnet`.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.ip_address_pool_subnet = ip_address_pool_subnet
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildIpAddressPoolSubnet._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_ip_address_pool_subnet', {
        'IpAddressPoolSubnet': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'IpAddressPoolSubnet')])),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildIpAddressPoolSubnet,
    False,
    None))



class ChildIpv6DadProfile(VapiStruct):
    """
    Child wrapper object for Ipv6DadProfile, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'Ipv6DadProfile': 'ipv6_dad_profile',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 ipv6_dad_profile=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  ipv6_dad_profile: :class:`Ipv6DadProfile` or ``None``
        :param ipv6_dad_profile: Contains the actual Ipv6DadProfile objects
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.ipv6_dad_profile = ipv6_dad_profile
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildIpv6DadProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_ipv6_dad_profile', {
        'Ipv6DadProfile': type.OptionalType(type.ReferenceType(__name__, 'Ipv6DadProfile')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildIpv6DadProfile,
    False,
    None))



class ChildIpv6NdraProfile(VapiStruct):
    """
    Child wrapper object for Ipv6NdraProfile, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'Ipv6NdraProfile': 'ipv6_ndra_profile',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 ipv6_ndra_profile=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  ipv6_ndra_profile: :class:`Ipv6NdraProfile` or ``None``
        :param ipv6_ndra_profile: Contains the actual Ipv6NdraProfile objects
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.ipv6_ndra_profile = ipv6_ndra_profile
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildIpv6NdraProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_ipv6_ndra_profile', {
        'Ipv6NdraProfile': type.OptionalType(type.ReferenceType(__name__, 'Ipv6NdraProfile')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildIpv6NdraProfile,
    False,
    None))



class ChildL2BridgeEndpointProfile(VapiStruct):
    """
    Child wrapper object for L2BridgeEndpointProfile, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'L2BridgeEndpointProfile': 'l2_bridge_endpoint_profile',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 l2_bridge_endpoint_profile=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  l2_bridge_endpoint_profile: :class:`L2BridgeEndpointProfile` or ``None``
        :param l2_bridge_endpoint_profile: Contains the actual L2BridgeEndpointProfile object
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.l2_bridge_endpoint_profile = l2_bridge_endpoint_profile
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildL2BridgeEndpointProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_l2_bridge_endpoint_profile', {
        'L2BridgeEndpointProfile': type.OptionalType(type.ReferenceType(__name__, 'L2BridgeEndpointProfile')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildL2BridgeEndpointProfile,
    False,
    None))



class ChildL2VPNService(VapiStruct):
    """
    Child wrapper object for L2VPNService, used in hierarchical API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'L2VPNService': 'l2_vpn_service',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 l2_vpn_service=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  l2_vpn_service: :class:`L2VPNService` or ``None``
        :param l2_vpn_service: Contains the actual L2VPNService object.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.l2_vpn_service = l2_vpn_service
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildL2VPNService._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_l2_VPN_service', {
        'L2VPNService': type.OptionalType(type.ReferenceType(__name__, 'L2VPNService')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildL2VPNService,
    False,
    None))



class ChildL2VPNSession(VapiStruct):
    """
    Child wrapper object for L2VPNSession, used in hierarchical API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'L2VPNSession': 'l2_vpn_session',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 l2_vpn_session=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  l2_vpn_session: :class:`L2VPNSession` or ``None``
        :param l2_vpn_session: Contains the actual L2VPNSession object.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.l2_vpn_session = l2_vpn_session
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildL2VPNSession._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_l2_VPN_session', {
        'L2VPNSession': type.OptionalType(type.ReferenceType(__name__, 'L2VPNSession')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildL2VPNSession,
    False,
    None))



class ChildL2Vpn(VapiStruct):
    """
    Child wrapper object for L2Vpn, used in hierarchical API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'L2Vpn': 'l2_vpn',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 l2_vpn=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  l2_vpn: :class:`L2Vpn` or ``None``
        :param l2_vpn: Contains the actual L2Vpn object.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.l2_vpn = l2_vpn
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildL2Vpn._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_l2_vpn', {
        'L2Vpn': type.OptionalType(type.ReferenceType(__name__, 'L2Vpn')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildL2Vpn,
    False,
    None))



class ChildL2VpnContext(VapiStruct):
    """
    Child wrapper object for L2VpnContext, used in hierarchical API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'L2VpnContext': 'l2_vpn_context',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 l2_vpn_context=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  l2_vpn_context: :class:`L2VpnContext` or ``None``
        :param l2_vpn_context: Contains the actual L2VpnContext object.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.l2_vpn_context = l2_vpn_context
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildL2VpnContext._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_l2_vpn_context', {
        'L2VpnContext': type.OptionalType(type.ReferenceType(__name__, 'L2VpnContext')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildL2VpnContext,
    False,
    None))



class ChildL3Vpn(VapiStruct):
    """
    Child wrapper object for L3Vpn, used in hierarchical API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'L3Vpn': 'l3_vpn',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 l3_vpn=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  l3_vpn: :class:`L3Vpn` or ``None``
        :param l3_vpn: Contains the actual L3Vpn object.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.l3_vpn = l3_vpn
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildL3Vpn._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_l3_vpn', {
        'L3Vpn': type.OptionalType(type.ReferenceType(__name__, 'L3Vpn')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildL3Vpn,
    False,
    None))



class ChildL3VpnContext(VapiStruct):
    """
    Child wrapper object for L3VpnContext, used in hierarchical API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'L3VpnContext': 'l3_vpn_context',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 l3_vpn_context=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  l3_vpn_context: :class:`L3VpnContext` or ``None``
        :param l3_vpn_context: Contains the actual L3VpnContext object.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.l3_vpn_context = l3_vpn_context
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildL3VpnContext._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_l3_vpn_context', {
        'L3VpnContext': type.OptionalType(type.ReferenceType(__name__, 'L3VpnContext')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildL3VpnContext,
    False,
    None))



class ChildLBAppProfile(VapiStruct):
    """
    Child wrapper for LBAppProfile, used in hierarchical API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'LBAppProfile': 'lb_app_profile',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 lb_app_profile=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  lb_app_profile: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param lb_app_profile: Contains the actual LBAppProfile object.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`LBAppProfile`. When methods return a value of this class as
            a return value, the attribute will contain all the attributes
            defined in :class:`LBAppProfile`.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.lb_app_profile = lb_app_profile
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildLBAppProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_LB_app_profile', {
        'LBAppProfile': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'LBAppProfile')])),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildLBAppProfile,
    False,
    None))



class ChildLBClientSslProfile(VapiStruct):
    """
    Child wrapper for LBClientSslProfile, used in hierarchical API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'LBClientSslProfile': 'lb_client_ssl_profile',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 lb_client_ssl_profile=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  lb_client_ssl_profile: :class:`LBClientSslProfile` or ``None``
        :param lb_client_ssl_profile: Contains the actual LBClientSslProfile object.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.lb_client_ssl_profile = lb_client_ssl_profile
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildLBClientSslProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_LB_client_ssl_profile', {
        'LBClientSslProfile': type.OptionalType(type.ReferenceType(__name__, 'LBClientSslProfile')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildLBClientSslProfile,
    False,
    None))



class ChildLBMonitorProfile(VapiStruct):
    """
    Child wrapper for LBMonitorProfile, used in hierarchical API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'LBMonitorProfile': 'lb_monitor_profile',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 lb_monitor_profile=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  lb_monitor_profile: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param lb_monitor_profile: Contains the actual LBMonitorProfile object.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`LBMonitorProfile`. When methods return a value of this
            class as a return value, the attribute will contain all the
            attributes defined in :class:`LBMonitorProfile`.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.lb_monitor_profile = lb_monitor_profile
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildLBMonitorProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_LB_monitor_profile', {
        'LBMonitorProfile': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'LBMonitorProfile')])),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildLBMonitorProfile,
    False,
    None))



class ChildLBPersistenceProfile(VapiStruct):
    """
    Child wrapper for LBPersistenceProfile, used in hierarchical API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'LBPersistenceProfile': 'lb_persistence_profile',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 lb_persistence_profile=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  lb_persistence_profile: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param lb_persistence_profile: Contains the actual LBPersistenceProfile object.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`LBPersistenceProfile`. When methods return a value of this
            class as a return value, the attribute will contain all the
            attributes defined in :class:`LBPersistenceProfile`.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.lb_persistence_profile = lb_persistence_profile
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildLBPersistenceProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_LB_persistence_profile', {
        'LBPersistenceProfile': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'LBPersistenceProfile')])),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildLBPersistenceProfile,
    False,
    None))



class ChildLBPool(VapiStruct):
    """
    Child wrapper for LBPool, used in hierarchical API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'LBPool': 'lb_pool',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 lb_pool=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  lb_pool: :class:`LBPool` or ``None``
        :param lb_pool: Contains the actual LBPool object.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.lb_pool = lb_pool
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildLBPool._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_LB_pool', {
        'LBPool': type.OptionalType(type.ReferenceType(__name__, 'LBPool')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildLBPool,
    False,
    None))



class ChildLBServerSslProfile(VapiStruct):
    """
    Child wrapper for LBServerSslProfile, used in hierarchical API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'LBServerSslProfile': 'lb_server_ssl_profile',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 lb_server_ssl_profile=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  lb_server_ssl_profile: :class:`LBServerSslProfile` or ``None``
        :param lb_server_ssl_profile: Contains the actual LBServerSslProfile object.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.lb_server_ssl_profile = lb_server_ssl_profile
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildLBServerSslProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_LB_server_ssl_profile', {
        'LBServerSslProfile': type.OptionalType(type.ReferenceType(__name__, 'LBServerSslProfile')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildLBServerSslProfile,
    False,
    None))



class ChildLBService(VapiStruct):
    """
    Child wrapper for LBService, used in hierarchical API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'LBService': 'lb_service',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 lb_service=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  lb_service: :class:`LBService` or ``None``
        :param lb_service: Contains the actual LBService object.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.lb_service = lb_service
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildLBService._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_LB_service', {
        'LBService': type.OptionalType(type.ReferenceType(__name__, 'LBService')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildLBService,
    False,
    None))



class ChildLBVirtualServer(VapiStruct):
    """
    Child wrapper for LBVirtualServer, used in hierarchical API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'LBVirtualServer': 'lb_virtual_server',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 lb_virtual_server=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  lb_virtual_server: :class:`LBVirtualServer` or ``None``
        :param lb_virtual_server: Contains the actual LBVirtualServer object.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.lb_virtual_server = lb_virtual_server
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildLBVirtualServer._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_LB_virtual_server', {
        'LBVirtualServer': type.OptionalType(type.ReferenceType(__name__, 'LBVirtualServer')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildLBVirtualServer,
    False,
    None))



class ChildLocaleServices(VapiStruct):
    """
    Child wrapper object for LocaleServices, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'LocaleServices': 'locale_services',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 locale_services=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  locale_services: :class:`LocaleServices` or ``None``
        :param locale_services: Contains the actual LocaleServices object
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.locale_services = locale_services
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildLocaleServices._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_locale_services', {
        'LocaleServices': type.OptionalType(type.ReferenceType(__name__, 'LocaleServices')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildLocaleServices,
    False,
    None))



class ChildMacDiscoveryProfile(VapiStruct):
    """
    Child wrapper object for MacDiscoveryProfile, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'MacDiscoveryProfile': 'mac_discovery_profile',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 mac_discovery_profile=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  mac_discovery_profile: :class:`MacDiscoveryProfile` or ``None``
        :param mac_discovery_profile: Contains the actual MacDiscoveryProfile object
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.mac_discovery_profile = mac_discovery_profile
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildMacDiscoveryProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_mac_discovery_profile', {
        'MacDiscoveryProfile': type.OptionalType(type.ReferenceType(__name__, 'MacDiscoveryProfile')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildMacDiscoveryProfile,
    False,
    None))



class ChildMetadataProxyConfig(VapiStruct):
    """
    Wrapper object for MetadataProxyConfig

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'MetadataProxyConfig': 'metadata_proxy_config',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 metadata_proxy_config=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  metadata_proxy_config: :class:`MetadataProxyConfig` or ``None``
        :param metadata_proxy_config: Contains the actual MetadataProxyConfig object.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.metadata_proxy_config = metadata_proxy_config
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildMetadataProxyConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_metadata_proxy_config', {
        'MetadataProxyConfig': type.OptionalType(type.ReferenceType(__name__, 'MetadataProxyConfig')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildMetadataProxyConfig,
    False,
    None))



class ChildPolicyConfigResource(VapiStruct):
    """
    Represents an object on the desired state

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildPolicyConfigResource"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildPolicyConfigResource',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildPolicyConfigResource._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_policy_config_resource', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildPolicyConfigResource,
    False,
    None))



class ChildPolicyContextProfile(VapiStruct):
    """
    Child wrapper object for PolicyContextProfile, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildPolicyContextProfile"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'PolicyContextProfile': 'policy_context_profile',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 policy_context_profile=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildPolicyContextProfile',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  policy_context_profile: :class:`PolicyContextProfile` or ``None``
        :param policy_context_profile: Contains the actual PolicyContextProfile objects
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.policy_context_profile = policy_context_profile
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildPolicyContextProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_policy_context_profile', {
        'PolicyContextProfile': type.OptionalType(type.ReferenceType(__name__, 'PolicyContextProfile')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildPolicyContextProfile,
    False,
    None))



class ChildPolicyDnsForwarder(VapiStruct):
    """
    Child wrapper object for PolicyDnsForwarder, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildPolicyDnsForwarder"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'PolicyDnsForwarder': 'policy_dns_forwarder',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 policy_dns_forwarder=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildPolicyDnsForwarder',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  policy_dns_forwarder: :class:`PolicyDnsForwarder` or ``None``
        :param policy_dns_forwarder: Contains the actual PolicyDnsForwarder object
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.policy_dns_forwarder = policy_dns_forwarder
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildPolicyDnsForwarder._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_policy_dns_forwarder', {
        'PolicyDnsForwarder': type.OptionalType(type.ReferenceType(__name__, 'PolicyDnsForwarder')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildPolicyDnsForwarder,
    False,
    None))



class ChildPolicyDnsForwarderZone(VapiStruct):
    """
    Child wrapper object for PolicyDnsForwarderZone, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildPolicyDnsForwarderZone"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'PolicyDnsForwarderZone': 'policy_dns_forwarder_zone',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 policy_dns_forwarder_zone=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildPolicyDnsForwarderZone',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  policy_dns_forwarder_zone: :class:`PolicyDnsForwarderZone` or ``None``
        :param policy_dns_forwarder_zone: Contains the actual PolicyDnsForwarderZone object
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.policy_dns_forwarder_zone = policy_dns_forwarder_zone
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildPolicyDnsForwarderZone._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_policy_dns_forwarder_zone', {
        'PolicyDnsForwarderZone': type.OptionalType(type.ReferenceType(__name__, 'PolicyDnsForwarderZone')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildPolicyDnsForwarderZone,
    False,
    None))



class ChildPolicyEdgeCluster(VapiStruct):
    """
    Child wrapper object for PolicyEdgeCluster, used in hierarchical API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildPolicyEdgeCluster"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'PolicyEdgeCluster': 'policy_edge_cluster',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 policy_edge_cluster=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildPolicyEdgeCluster',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  policy_edge_cluster: :class:`PolicyEdgeCluster` or ``None``
        :param policy_edge_cluster: Contains the actual PolicyEdgeCluster object.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.policy_edge_cluster = policy_edge_cluster
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildPolicyEdgeCluster._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_policy_edge_cluster', {
        'PolicyEdgeCluster': type.OptionalType(type.ReferenceType(__name__, 'PolicyEdgeCluster')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildPolicyEdgeCluster,
    False,
    None))



class ChildPolicyEdgeNode(VapiStruct):
    """
    Child wrapper object for PolicyEdgeNode, used in hierarchical API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildPolicyEdgeNode"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'PolicyEdgeNode': 'policy_edge_node',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 policy_edge_node=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildPolicyEdgeNode',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  policy_edge_node: :class:`PolicyEdgeNode` or ``None``
        :param policy_edge_node: Contains the actual PolicyEdgeNode object.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.policy_edge_node = policy_edge_node
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildPolicyEdgeNode._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_policy_edge_node', {
        'PolicyEdgeNode': type.OptionalType(type.ReferenceType(__name__, 'PolicyEdgeNode')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildPolicyEdgeNode,
    False,
    None))



class ChildPolicyExcludeList(VapiStruct):
    """
    Wrapper object for PolicyExcludeList

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildPolicyExcludeList"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'PolicyExcludeList': 'policy_exclude_list',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 policy_exclude_list=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildPolicyExcludeList',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  policy_exclude_list: :class:`PolicyExcludeList` or ``None``
        :param policy_exclude_list: Contains the actual policy exclude list object.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.policy_exclude_list = policy_exclude_list
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildPolicyExcludeList._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_policy_exclude_list', {
        'PolicyExcludeList': type.OptionalType(type.ReferenceType(__name__, 'PolicyExcludeList')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildPolicyExcludeList,
    False,
    None))



class ChildPolicyFirewallCPUMemThresholdsProfileBindingMap(VapiStruct):
    """
    Child wrapper object for PolicyFirewallCPUMemThresholdsProfileBindingMap,
    used in hierarchical API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildPolicyFirewallCPUMemThresholdsProfileBindingMap"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'PolicyFirewallCPUMemThresholdsProfileBindingMap': 'policy_firewall_cpu_mem_thresholds_profile_binding_map',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 policy_firewall_cpu_mem_thresholds_profile_binding_map=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildPolicyFirewallCPUMemThresholdsProfileBindingMap',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  policy_firewall_cpu_mem_thresholds_profile_binding_map: :class:`PolicyFirewallCPUMemThresholdsProfileBindingMap` or ``None``
        :param policy_firewall_cpu_mem_thresholds_profile_binding_map: Contains the actual PolicyFirewallCPUMemThresholdsProfileBindingMap
            object.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.policy_firewall_cpu_mem_thresholds_profile_binding_map = policy_firewall_cpu_mem_thresholds_profile_binding_map
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildPolicyFirewallCPUMemThresholdsProfileBindingMap._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_policy_firewall_CPU_mem_thresholds_profile_binding_map', {
        'PolicyFirewallCPUMemThresholdsProfileBindingMap': type.OptionalType(type.ReferenceType(__name__, 'PolicyFirewallCPUMemThresholdsProfileBindingMap')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildPolicyFirewallCPUMemThresholdsProfileBindingMap,
    False,
    None))



class ChildPolicyFirewallCpuMemThresholdsProfile(VapiStruct):
    """
    Child wrapper object for PolicyFirewallCpuMemThresholdsProfile, used in
    hierarchical API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildPolicyFirewallCpuMemThresholdsProfile"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'PolicyFirewallCpuMemThresholdsProfile': 'policy_firewall_cpu_mem_thresholds_profile',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 policy_firewall_cpu_mem_thresholds_profile=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildPolicyFirewallCpuMemThresholdsProfile',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  policy_firewall_cpu_mem_thresholds_profile: :class:`PolicyFirewallCpuMemThresholdsProfile` or ``None``
        :param policy_firewall_cpu_mem_thresholds_profile: Contains the actual PolicyFirewallCpuMemThresholdsProfile object
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.policy_firewall_cpu_mem_thresholds_profile = policy_firewall_cpu_mem_thresholds_profile
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildPolicyFirewallCpuMemThresholdsProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_policy_firewall_cpu_mem_thresholds_profile', {
        'PolicyFirewallCpuMemThresholdsProfile': type.OptionalType(type.ReferenceType(__name__, 'PolicyFirewallCpuMemThresholdsProfile')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildPolicyFirewallCpuMemThresholdsProfile,
    False,
    None))



class ChildPolicyFirewallFloodProtectionProfileBindingMap(VapiStruct):
    """
    Child wrapper object for PolicyFirewallFloodProtectionProfileBindingMap,
    used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildPolicyFirewallFloodProtectionProfileBindingMap"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'PolicyFirewallFloodProtectionProfileBindingMap': 'policy_firewall_flood_protection_profile_binding_map',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 policy_firewall_flood_protection_profile_binding_map=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildPolicyFirewallFloodProtectionProfileBindingMap',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  policy_firewall_flood_protection_profile_binding_map: :class:`PolicyFirewallFloodProtectionProfileBindingMap` or ``None``
        :param policy_firewall_flood_protection_profile_binding_map: Contains the actual PolicyFirewallFloodProtectionProfileBindingMap
            object
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.policy_firewall_flood_protection_profile_binding_map = policy_firewall_flood_protection_profile_binding_map
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildPolicyFirewallFloodProtectionProfileBindingMap._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_policy_firewall_flood_protection_profile_binding_map', {
        'PolicyFirewallFloodProtectionProfileBindingMap': type.OptionalType(type.ReferenceType(__name__, 'PolicyFirewallFloodProtectionProfileBindingMap')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildPolicyFirewallFloodProtectionProfileBindingMap,
    False,
    None))



class ChildPolicyFirewallScheduler(VapiStruct):
    """
    Child wrapper object for PolicyFirewallScheduler, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildPolicyFirewallScheduler"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'PolicyFirewallScheduler': 'policy_firewall_scheduler',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 policy_firewall_scheduler=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildPolicyFirewallScheduler',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  policy_firewall_scheduler: :class:`PolicyFirewallScheduler` or ``None``
        :param policy_firewall_scheduler: Contains the actual PolicyFirewallScheduler objects
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.policy_firewall_scheduler = policy_firewall_scheduler
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildPolicyFirewallScheduler._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_policy_firewall_scheduler', {
        'PolicyFirewallScheduler': type.OptionalType(type.ReferenceType(__name__, 'PolicyFirewallScheduler')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildPolicyFirewallScheduler,
    False,
    None))



class ChildPolicyFirewallSessionTimerProfile(VapiStruct):
    """
    Child wrapper object for PolicyFirewallSessionTimerProfile, used in
    hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildPolicyFirewallSessionTimerProfile"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'PolicyFirewallSessionTimerProfile': 'policy_firewall_session_timer_profile',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 policy_firewall_session_timer_profile=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildPolicyFirewallSessionTimerProfile',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  policy_firewall_session_timer_profile: :class:`PolicyFirewallSessionTimerProfile` or ``None``
        :param policy_firewall_session_timer_profile: Contains the actual PolicyFirewallSessionTimerProfile object
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.policy_firewall_session_timer_profile = policy_firewall_session_timer_profile
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildPolicyFirewallSessionTimerProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_policy_firewall_session_timer_profile', {
        'PolicyFirewallSessionTimerProfile': type.OptionalType(type.ReferenceType(__name__, 'PolicyFirewallSessionTimerProfile')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildPolicyFirewallSessionTimerProfile,
    False,
    None))



class ChildPolicyFirewallSessionTimerProfileBindingMap(VapiStruct):
    """
    Child wrapper object for PolicyFirewallSessionTimerProfileBindingMap, used
    in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildPolicyFirewallSessionTimerProfileBindingMap"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'PolicyFirewallSessionTimerProfileBindingMap': 'policy_firewall_session_timer_profile_binding_map',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 policy_firewall_session_timer_profile_binding_map=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildPolicyFirewallSessionTimerProfileBindingMap',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  policy_firewall_session_timer_profile_binding_map: :class:`PolicyFirewallSessionTimerProfileBindingMap` or ``None``
        :param policy_firewall_session_timer_profile_binding_map: Contains the actual PolicyFirewallSessionTimerProfileBindingMap
            object
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.policy_firewall_session_timer_profile_binding_map = policy_firewall_session_timer_profile_binding_map
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildPolicyFirewallSessionTimerProfileBindingMap._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_policy_firewall_session_timer_profile_binding_map', {
        'PolicyFirewallSessionTimerProfileBindingMap': type.OptionalType(type.ReferenceType(__name__, 'PolicyFirewallSessionTimerProfileBindingMap')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildPolicyFirewallSessionTimerProfileBindingMap,
    False,
    None))



class ChildPolicyGroupReference(VapiStruct):
    """
    Child wrapper object for PolicyGroupReference, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildPolicyGroupReference"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'PolicyGroupReference': 'policy_group_reference',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 policy_group_reference=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildPolicyGroupReference',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  policy_group_reference: :class:`PolicyGroupReference` or ``None``
        :param policy_group_reference: Contains the actual PolicyGroupReference object
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.policy_group_reference = policy_group_reference
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildPolicyGroupReference._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_policy_group_reference', {
        'PolicyGroupReference': type.OptionalType(type.ReferenceType(__name__, 'PolicyGroupReference')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildPolicyGroupReference,
    False,
    None))



class ChildPolicyIgmpProfile(VapiStruct):
    """
    Child wrapper object for PolicyIgmpProfile used in hierarchical API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildPolicyIgmpProfile"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'PolicyIgmpProfile': 'policy_igmp_profile',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 policy_igmp_profile=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildPolicyIgmpProfile',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  policy_igmp_profile: :class:`PolicyIgmpProfile` or ``None``
        :param policy_igmp_profile: Contains actual PolicyIgmpProfile.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.policy_igmp_profile = policy_igmp_profile
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildPolicyIgmpProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_policy_igmp_profile', {
        'PolicyIgmpProfile': type.OptionalType(type.ReferenceType(__name__, 'PolicyIgmpProfile')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildPolicyIgmpProfile,
    False,
    None))



class ChildPolicyLabel(VapiStruct):
    """
    Child wrapper object for PolicyLabel, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildPolicyLabel"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'PolicyLabel': 'policy_label',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 policy_label=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildPolicyLabel',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  policy_label: :class:`PolicyLabel` or ``None``
        :param policy_label: Contains the actual PolicyLabel object
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.policy_label = policy_label
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildPolicyLabel._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_policy_label', {
        'PolicyLabel': type.OptionalType(type.ReferenceType(__name__, 'PolicyLabel')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildPolicyLabel,
    False,
    None))



class ChildPolicyLbMonitorProfile(VapiStruct):
    """
    Child wrapper for PolicyLbMonitorProfile, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildPolicyLbMonitorProfile"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'PolicyLbMonitorProfile': 'policy_lb_monitor_profile',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 policy_lb_monitor_profile=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildPolicyLbMonitorProfile',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  policy_lb_monitor_profile: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param policy_lb_monitor_profile: Contains the actual PolicyLbMonitorProfile object
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyLbMonitorProfile`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyLbMonitorProfile`.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.policy_lb_monitor_profile = policy_lb_monitor_profile
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildPolicyLbMonitorProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_policy_lb_monitor_profile', {
        'PolicyLbMonitorProfile': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyLbMonitorProfile')])),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildPolicyLbMonitorProfile,
    False,
    None))



class ChildPolicyLbPersistenceProfile(VapiStruct):
    """
    Child wrapper for PolicyLbPersistenceProfile, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildPolicyLbPersistenceProfile"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'PolicyLbPersistenceProfile': 'policy_lb_persistence_profile',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 policy_lb_persistence_profile=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildPolicyLbPersistenceProfile',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  policy_lb_persistence_profile: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param policy_lb_persistence_profile: Contains the actual PolicyLbPersistenceProfile object
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyLbPersistenceProfile`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyLbPersistenceProfile`.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.policy_lb_persistence_profile = policy_lb_persistence_profile
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildPolicyLbPersistenceProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_policy_lb_persistence_profile', {
        'PolicyLbPersistenceProfile': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyLbPersistenceProfile')])),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildPolicyLbPersistenceProfile,
    False,
    None))



class ChildPolicyLbPoolAccess(VapiStruct):
    """
    Child wrapper for PolicyLbPoolAccess, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildPolicyLbPoolAccess"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'PolicyLbPoolAccess': 'policy_lb_pool_access',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 policy_lb_pool_access=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildPolicyLbPoolAccess',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  policy_lb_pool_access: :class:`PolicyLbPoolAccess` or ``None``
        :param policy_lb_pool_access: Contains the actual PolicyLbPoolAccess object
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.policy_lb_pool_access = policy_lb_pool_access
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildPolicyLbPoolAccess._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_policy_lb_pool_access', {
        'PolicyLbPoolAccess': type.OptionalType(type.ReferenceType(__name__, 'PolicyLbPoolAccess')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildPolicyLbPoolAccess,
    False,
    None))



class ChildPolicyLbRule(VapiStruct):
    """
    Child wrapper for PolicyLbRule, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildPolicyLbRule"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'PolicyLbRule': 'policy_lb_rule',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 policy_lb_rule=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildPolicyLbRule',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  policy_lb_rule: :class:`PolicyLbRule` or ``None``
        :param policy_lb_rule: Contains the actual PolicyLbRule object
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.policy_lb_rule = policy_lb_rule
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildPolicyLbRule._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_policy_lb_rule', {
        'PolicyLbRule': type.OptionalType(type.ReferenceType(__name__, 'PolicyLbRule')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildPolicyLbRule,
    False,
    None))



class ChildPolicyLbVirtualServer(VapiStruct):
    """
    Child wrapper for PolicyLbVirtualServer, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildPolicyLbVirtualServer"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'PolicyLbVirtualServer': 'policy_lb_virtual_server',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 policy_lb_virtual_server=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildPolicyLbVirtualServer',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  policy_lb_virtual_server: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param policy_lb_virtual_server: Contains the actual PolicyLbVirtualServer object
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PolicyLbVirtualServer`. When methods return a value of this
            class as a return value, the attribute will contain all the
            attributes defined in :class:`PolicyLbVirtualServer`.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.policy_lb_virtual_server = policy_lb_virtual_server
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildPolicyLbVirtualServer._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_policy_lb_virtual_server', {
        'PolicyLbVirtualServer': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PolicyLbVirtualServer')])),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildPolicyLbVirtualServer,
    False,
    None))



class ChildPolicyMulticastConfig(VapiStruct):
    """
    Child wrapper object for PolicyMulticastConfig used in hierarchical API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildPolicyMulticastConfig"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'PolicyMulticastConfig': 'policy_multicast_config',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 policy_multicast_config=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildPolicyMulticastConfig',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  policy_multicast_config: :class:`PolicyMulticastConfig` or ``None``
        :param policy_multicast_config: Contains actual PolicyMulticastConfig.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.policy_multicast_config = policy_multicast_config
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildPolicyMulticastConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_policy_multicast_config', {
        'PolicyMulticastConfig': type.OptionalType(type.ReferenceType(__name__, 'PolicyMulticastConfig')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildPolicyMulticastConfig,
    False,
    None))



class ChildPolicyNat(VapiStruct):
    """
    Child wrapper object for PolicyNat, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildPolicyNat"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'PolicyNat': 'policy_nat',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 policy_nat=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildPolicyNat',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  policy_nat: :class:`PolicyNat` or ``None``
        :param policy_nat: Contains the actual PolicyNAT object
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.policy_nat = policy_nat
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildPolicyNat._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_policy_nat', {
        'PolicyNat': type.OptionalType(type.ReferenceType(__name__, 'PolicyNat')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildPolicyNat,
    False,
    None))



class ChildPolicyNatRule(VapiStruct):
    """
    Child wrapper object for PolicyNatRule, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildPolicyNatRule"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'PolicyNatRule': 'policy_nat_rule',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 policy_nat_rule=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildPolicyNatRule',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  policy_nat_rule: :class:`PolicyNatRule` or ``None``
        :param policy_nat_rule: Contains the actual PolicyNatRule object
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.policy_nat_rule = policy_nat_rule
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildPolicyNatRule._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_policy_nat_rule', {
        'PolicyNatRule': type.OptionalType(type.ReferenceType(__name__, 'PolicyNatRule')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildPolicyNatRule,
    False,
    None))



class ChildPolicyPimProfile(VapiStruct):
    """
    Child wrapper object for PolicyPimProfile used in hierarchical API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildPolicyPimProfile"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'PolicyPimProfile': 'policy_pim_profile',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 policy_pim_profile=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildPolicyPimProfile',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  policy_pim_profile: :class:`PolicyPimProfile` or ``None``
        :param policy_pim_profile: Contains actual PolicyPimProfile.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.policy_pim_profile = policy_pim_profile
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildPolicyPimProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_policy_pim_profile', {
        'PolicyPimProfile': type.OptionalType(type.ReferenceType(__name__, 'PolicyPimProfile')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildPolicyPimProfile,
    False,
    None))



class ChildPolicyServiceChain(VapiStruct):
    """
    Child wrapper object for PolicyServiceInstance used in hierarchical API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildPolicyServiceChain"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'PolicyServiceChain': 'policy_service_chain',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 policy_service_chain=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildPolicyServiceChain',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  policy_service_chain: :class:`PolicyServiceChain` or ``None``
        :param policy_service_chain: Contains actual PolicyServiceChain.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.policy_service_chain = policy_service_chain
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildPolicyServiceChain._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_policy_service_chain', {
        'PolicyServiceChain': type.OptionalType(type.ReferenceType(__name__, 'PolicyServiceChain')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildPolicyServiceChain,
    False,
    None))



class ChildPolicyServiceInstance(VapiStruct):
    """
    Child wrapper object for PolicyServiceInstance used in hierarchical API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildPolicyServiceInstance"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'PolicyServiceInstance': 'policy_service_instance',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 policy_service_instance=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildPolicyServiceInstance',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  policy_service_instance: :class:`PolicyServiceInstance` or ``None``
        :param policy_service_instance: Contains actual PolicyServiceInstance.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.policy_service_instance = policy_service_instance
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildPolicyServiceInstance._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_policy_service_instance', {
        'PolicyServiceInstance': type.OptionalType(type.ReferenceType(__name__, 'PolicyServiceInstance')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildPolicyServiceInstance,
    False,
    None))



class ChildPolicyServiceProfile(VapiStruct):
    """
    Child wrapper object for PolicyServiceProfile used in hierarchical API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildPolicyServiceProfile"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'PolicyServiceProfile': 'policy_service_profile',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 policy_service_profile=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildPolicyServiceProfile',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  policy_service_profile: :class:`PolicyServiceProfile` or ``None``
        :param policy_service_profile: Contains actual PolicyServiceProfile.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.policy_service_profile = policy_service_profile
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildPolicyServiceProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_policy_service_profile', {
        'PolicyServiceProfile': type.OptionalType(type.ReferenceType(__name__, 'PolicyServiceProfile')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildPolicyServiceProfile,
    False,
    None))



class ChildPolicyTransportZone(VapiStruct):
    """
    Child wrapper object for PolicyTransportZone, used in hierarchical API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildPolicyTransportZone"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'PolicyTransportZone': 'policy_transport_zone',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 policy_transport_zone=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildPolicyTransportZone',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  policy_transport_zone: :class:`PolicyTransportZone` or ``None``
        :param policy_transport_zone: Contains the actual PolicyTransportZone object.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.policy_transport_zone = policy_transport_zone
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildPolicyTransportZone._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_policy_transport_zone', {
        'PolicyTransportZone': type.OptionalType(type.ReferenceType(__name__, 'PolicyTransportZone')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildPolicyTransportZone,
    False,
    None))



class ChildPolicyUrlCategorizationConfig(VapiStruct):
    """
    Child wrapper object for PolicyUrlCategorizationConfig, used in
    hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildPolicyUrlCategorizationConfig"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'PolicyUrlCategorizationConfig': 'policy_url_categorization_config',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 policy_url_categorization_config=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildPolicyUrlCategorizationConfig',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  policy_url_categorization_config: :class:`PolicyUrlCategorizationConfig` or ``None``
        :param policy_url_categorization_config: Contains the actual PolicyUrlCategorizationConfig object
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.policy_url_categorization_config = policy_url_categorization_config
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildPolicyUrlCategorizationConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_policy_url_categorization_config', {
        'PolicyUrlCategorizationConfig': type.OptionalType(type.ReferenceType(__name__, 'PolicyUrlCategorizationConfig')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildPolicyUrlCategorizationConfig,
    False,
    None))



class ChildPortDiscoveryProfileBindingMap(VapiStruct):
    """
    Child wrapper object for PortDiscoveryProfileBindingMap, used in
    hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildPortDiscoveryProfileBindingMap"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'PortDiscoveryProfileBindingMap': 'port_discovery_profile_binding_map',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 port_discovery_profile_binding_map=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildPortDiscoveryProfileBindingMap',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  port_discovery_profile_binding_map: :class:`PortDiscoveryProfileBindingMap` or ``None``
        :param port_discovery_profile_binding_map: Contains the actual PortDiscoveryProfileBindingMap object
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.port_discovery_profile_binding_map = port_discovery_profile_binding_map
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildPortDiscoveryProfileBindingMap._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_port_discovery_profile_binding_map', {
        'PortDiscoveryProfileBindingMap': type.OptionalType(type.ReferenceType(__name__, 'PortDiscoveryProfileBindingMap')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildPortDiscoveryProfileBindingMap,
    False,
    None))



class ChildPortMirroringProfile(VapiStruct):
    """
    Child wrapper object for PortMirroringProfile, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildPortMirroringProfile"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'PortMirroringProfile': 'port_mirroring_profile',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 port_mirroring_profile=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildPortMirroringProfile',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  port_mirroring_profile: :class:`PortMirroringProfile` or ``None``
        :param port_mirroring_profile: Contains the actual PortMirroringProfile object
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.port_mirroring_profile = port_mirroring_profile
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildPortMirroringProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_port_mirroring_profile', {
        'PortMirroringProfile': type.OptionalType(type.ReferenceType(__name__, 'PortMirroringProfile')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildPortMirroringProfile,
    False,
    None))



class ChildPortMonitoringProfileBindingMap(VapiStruct):
    """
    Child wrapper object for PortMonitoringProfileBindingMap, used in
    hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildPortMonitoringProfileBindingMap"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'PortMonitoringProfileBindingMap': 'port_monitoring_profile_binding_map',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 port_monitoring_profile_binding_map=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildPortMonitoringProfileBindingMap',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  port_monitoring_profile_binding_map: :class:`PortMonitoringProfileBindingMap` or ``None``
        :param port_monitoring_profile_binding_map: Contains the actual PortMonitoringProfileBindingMap object
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.port_monitoring_profile_binding_map = port_monitoring_profile_binding_map
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildPortMonitoringProfileBindingMap._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_port_monitoring_profile_binding_map', {
        'PortMonitoringProfileBindingMap': type.OptionalType(type.ReferenceType(__name__, 'PortMonitoringProfileBindingMap')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildPortMonitoringProfileBindingMap,
    False,
    None))



class ChildPortQosProfileBindingMap(VapiStruct):
    """
    Child wrapper object for PortQoSProfileBindingMap, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildPortQoSProfileBindingMap"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'PortQoSProfileBindingMap': 'port_qos_profile_binding_map',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 port_qos_profile_binding_map=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildPortQoSProfileBindingMap',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  port_qos_profile_binding_map: :class:`PortQosProfileBindingMap` or ``None``
        :param port_qos_profile_binding_map: Contains the actual PortQoSProfileBindingMap object
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.port_qos_profile_binding_map = port_qos_profile_binding_map
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildPortQosProfileBindingMap._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_port_qos_profile_binding_map', {
        'PortQoSProfileBindingMap': type.OptionalType(type.ReferenceType(__name__, 'PortQosProfileBindingMap')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildPortQosProfileBindingMap,
    False,
    None))



class ChildPortSecurityProfileBindingMap(VapiStruct):
    """
    Child wrapper object for PortSecurityProfileBindingMap, used in
    hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildPortSecurityProfileBindingMap"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'PortSecurityProfileBindingMap': 'port_security_profile_binding_map',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 port_security_profile_binding_map=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildPortSecurityProfileBindingMap',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  port_security_profile_binding_map: :class:`PortSecurityProfileBindingMap` or ``None``
        :param port_security_profile_binding_map: Contains the actual PortSecurityProfileBindingMap object
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.port_security_profile_binding_map = port_security_profile_binding_map
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildPortSecurityProfileBindingMap._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_port_security_profile_binding_map', {
        'PortSecurityProfileBindingMap': type.OptionalType(type.ReferenceType(__name__, 'PortSecurityProfileBindingMap')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildPortSecurityProfileBindingMap,
    False,
    None))



class ChildPrefixList(VapiStruct):
    """
    Child wrapper object for PrefixList, used in hierarchical API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildPrefixList"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'PrefixList': 'prefix_list',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 prefix_list=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildPrefixList',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  prefix_list: :class:`PrefixList` or ``None``
        :param prefix_list: Contains the actual PrefixList object.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.prefix_list = prefix_list
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildPrefixList._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_prefix_list', {
        'PrefixList': type.OptionalType(type.ReferenceType(__name__, 'PrefixList')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildPrefixList,
    False,
    None))



class ChildQosProfile(VapiStruct):
    """
    Child wrapper object for QoSProfile, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildQoSProfile"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'QoSProfile': 'qos_profile',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 qos_profile=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildQoSProfile',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  qos_profile: :class:`QosProfile` or ``None``
        :param qos_profile: Contains the actual QoSProfile object
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.qos_profile = qos_profile
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildQosProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_qos_profile', {
        'QoSProfile': type.OptionalType(type.ReferenceType(__name__, 'QosProfile')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildQosProfile,
    False,
    None))



class ChildReaction(VapiStruct):
    """
    Child wrapper object for Reaction used in hierarchical API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildReaction"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'Reaction': 'reaction',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 reaction=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildReaction',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  reaction: :class:`Reaction` or ``None``
        :param reaction: Contains the actual Reaction object.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.reaction = reaction
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildReaction._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_reaction', {
        'Reaction': type.OptionalType(type.ReferenceType(__name__, 'Reaction')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildReaction,
    False,
    None))



class ChildRedirectionPolicy(VapiStruct):
    """
    Child wrapper object for RedirectionPolicy used in Hierarchical API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildRedirectionPolicy"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'RedirectionPolicy': 'redirection_policy',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 redirection_policy=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildRedirectionPolicy',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  redirection_policy: :class:`RedirectionPolicy` or ``None``
        :param redirection_policy: Contains actual RedirectionPolicy.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.redirection_policy = redirection_policy
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildRedirectionPolicy._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_redirection_policy', {
        'RedirectionPolicy': type.OptionalType(type.ReferenceType(__name__, 'RedirectionPolicy')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildRedirectionPolicy,
    False,
    None))



class ChildRedirectionRule(VapiStruct):
    """
    Child wrapper object for ChildRedirectionRule used in Hierarchical API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildRedirectionRule"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'RedirectionRule': 'redirection_rule',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 redirection_rule=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildRedirectionRule',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  redirection_rule: :class:`RedirectionRule` or ``None``
        :param redirection_rule: Contains actual RedirectionRule.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.redirection_rule = redirection_rule
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildRedirectionRule._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_redirection_rule', {
        'RedirectionRule': type.OptionalType(type.ReferenceType(__name__, 'RedirectionRule')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildRedirectionRule,
    False,
    None))



class ChildResourceReference(VapiStruct):
    """
    Represents a reference to ChildPolicyConfigResource in the hierarchical
    API. resource_type, id and target_type are mandatory fields.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildResourceReference"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'children': 'children',
                            'target_type': 'target_type',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 children=None,
                 target_type=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildResourceReference',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  target_type: :class:`str` or ``None``
        :param target_type: The target type of this reference
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.children = children
        self.target_type = target_type
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildResourceReference._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_resource_reference', {
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'target_type': type.OptionalType(type.StringType()),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildResourceReference,
    False,
    None))



class ChildRule(VapiStruct):
    """
    Child wrapper object for Rule, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildRule"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'Rule': 'rule',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 rule=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildRule',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  rule: :class:`Rule` or ``None``
        :param rule: Contains the actual Rule object
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.rule = rule
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildRule._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_rule', {
        'Rule': type.OptionalType(type.ReferenceType(__name__, 'Rule')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildRule,
    False,
    None))



class ChildSecurityPolicy(VapiStruct):
    """
    Child wrapper object for SecurityPolicy, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildSecurityPolicy"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'SecurityPolicy': 'security_policy',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 security_policy=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildSecurityPolicy',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  security_policy: :class:`SecurityPolicy` or ``None``
        :param security_policy: Contains the actual SecurityPolicy object
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.security_policy = security_policy
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildSecurityPolicy._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_security_policy', {
        'SecurityPolicy': type.OptionalType(type.ReferenceType(__name__, 'SecurityPolicy')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildSecurityPolicy,
    False,
    None))



class ChildSecurityZone(VapiStruct):
    """
    Child wrapper object for SecurityZone, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildSecurityZone"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'SecurityZone': 'security_zone',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 security_zone=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildSecurityZone',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  security_zone: :class:`SecurityZone` or ``None``
        :param security_zone: Contains the actual SecurityZone object
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.security_zone = security_zone
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildSecurityZone._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_security_zone', {
        'SecurityZone': type.OptionalType(type.ReferenceType(__name__, 'SecurityZone')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildSecurityZone,
    False,
    None))



class ChildSecurityZoneBinding(VapiStruct):
    """
    Child wrapper object for SecurityZoneBinding, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildSecurityZoneBinding"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'SecurityZoneBinding': 'security_zone_binding',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 security_zone_binding=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildSecurityZoneBinding',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  security_zone_binding: :class:`SecurityZoneBinding` or ``None``
        :param security_zone_binding: Security zone binding for a tier.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.security_zone_binding = security_zone_binding
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildSecurityZoneBinding._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_security_zone_binding', {
        'SecurityZoneBinding': type.OptionalType(type.ReferenceType(__name__, 'SecurityZoneBinding')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildSecurityZoneBinding,
    False,
    None))



class ChildSecurityZoneRule(VapiStruct):
    """
    Child wrapper object for SecurityZoneRule, used in hierarchical API This
    type is deprecated. Use the type ChildRule instead.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildSecurityZoneRule"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'SecurityZoneRule': 'security_zone_rule',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 security_zone_rule=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildSecurityZoneRule',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  security_zone_rule: :class:`SecurityZoneRule` or ``None``
        :param security_zone_rule: Contains the actual SecurityZoneRule object.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.security_zone_rule = security_zone_rule
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildSecurityZoneRule._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_security_zone_rule', {
        'SecurityZoneRule': type.OptionalType(type.ReferenceType(__name__, 'SecurityZoneRule')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildSecurityZoneRule,
    False,
    None))



class ChildSegment(VapiStruct):
    """
    Child wrapper object for Segment, used in hierarchical API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildSegment"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'Segment': 'segment',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 segment=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildSegment',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  segment: :class:`Segment` or ``None``
        :param segment: Contains the actual Segment object.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.segment = segment
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildSegment._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_segment', {
        'Segment': type.OptionalType(type.ReferenceType(__name__, 'Segment')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildSegment,
    False,
    None))



class ChildSegmentDiscoveryProfileBindingMap(VapiStruct):
    """
    Child wrapper object for SegmentDiscoveryProfileBindingMap, used in
    hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildSegmentDiscoveryProfileBindingMap"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'SegmentDiscoveryProfileBindingMap': 'segment_discovery_profile_binding_map',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 segment_discovery_profile_binding_map=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildSegmentDiscoveryProfileBindingMap',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  segment_discovery_profile_binding_map: :class:`SegmentDiscoveryProfileBindingMap` or ``None``
        :param segment_discovery_profile_binding_map: Contains the actual SegmentDiscoveryProfileBindingMap object
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.segment_discovery_profile_binding_map = segment_discovery_profile_binding_map
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildSegmentDiscoveryProfileBindingMap._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_segment_discovery_profile_binding_map', {
        'SegmentDiscoveryProfileBindingMap': type.OptionalType(type.ReferenceType(__name__, 'SegmentDiscoveryProfileBindingMap')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildSegmentDiscoveryProfileBindingMap,
    False,
    None))



class ChildSegmentMonitoringProfileBindingMap(VapiStruct):
    """
    Child wrapper object for SegmentMonitoringProfileBindingMap, used in
    hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildSegmentMonitoringProfileBindingMap"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'SegmentMonitoringProfileBindingMap': 'segment_monitoring_profile_binding_map',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 segment_monitoring_profile_binding_map=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildSegmentMonitoringProfileBindingMap',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  segment_monitoring_profile_binding_map: :class:`SegmentMonitoringProfileBindingMap` or ``None``
        :param segment_monitoring_profile_binding_map: Contains the actual SegmentMonitoringProfileBindingMap object
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.segment_monitoring_profile_binding_map = segment_monitoring_profile_binding_map
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildSegmentMonitoringProfileBindingMap._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_segment_monitoring_profile_binding_map', {
        'SegmentMonitoringProfileBindingMap': type.OptionalType(type.ReferenceType(__name__, 'SegmentMonitoringProfileBindingMap')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildSegmentMonitoringProfileBindingMap,
    False,
    None))



class ChildSegmentPort(VapiStruct):
    """
    Child wrapper object for SegmentPort, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildSegmentPort"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'SegmentPort': 'segment_port',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 segment_port=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildSegmentPort',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  segment_port: :class:`SegmentPort` or ``None``
        :param segment_port: Contains the actual SegmentPort object
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.segment_port = segment_port
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildSegmentPort._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_segment_port', {
        'SegmentPort': type.OptionalType(type.ReferenceType(__name__, 'SegmentPort')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildSegmentPort,
    False,
    None))



class ChildSegmentQosProfileBindingMap(VapiStruct):
    """
    Child wrapper object for SegmentQoSProfileBindingMap, used in hierarchical
    API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildSegmentQoSProfileBindingMap"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'SegmentQoSProfileBindingMap': 'segment_qos_profile_binding_map',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 segment_qos_profile_binding_map=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildSegmentQoSProfileBindingMap',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  segment_qos_profile_binding_map: :class:`SegmentQosProfileBindingMap` or ``None``
        :param segment_qos_profile_binding_map: Contains the actual SegmentQoSProfileBindingMap object
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.segment_qos_profile_binding_map = segment_qos_profile_binding_map
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildSegmentQosProfileBindingMap._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_segment_qos_profile_binding_map', {
        'SegmentQoSProfileBindingMap': type.OptionalType(type.ReferenceType(__name__, 'SegmentQosProfileBindingMap')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildSegmentQosProfileBindingMap,
    False,
    None))



class ChildSegmentSecurityProfile(VapiStruct):
    """
    Child wrapper object for SegmentSecurityProfile, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildSegmentSecurityProfile"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'SegmentSecurityProfile': 'segment_security_profile',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 segment_security_profile=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildSegmentSecurityProfile',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  segment_security_profile: :class:`SegmentSecurityProfile` or ``None``
        :param segment_security_profile: Contains the actual SegmentSecurityProfile object
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.segment_security_profile = segment_security_profile
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildSegmentSecurityProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_segment_security_profile', {
        'SegmentSecurityProfile': type.OptionalType(type.ReferenceType(__name__, 'SegmentSecurityProfile')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildSegmentSecurityProfile,
    False,
    None))



class ChildSegmentSecurityProfileBindingMap(VapiStruct):
    """
    Child wrapper object for SegmentSecurityProfileBindingMap, used in
    hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildSegmentSecurityProfileBindingMap"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'SegmentSecurityProfileBindingMap': 'segment_security_profile_binding_map',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 segment_security_profile_binding_map=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildSegmentSecurityProfileBindingMap',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  segment_security_profile_binding_map: :class:`SegmentSecurityProfileBindingMap` or ``None``
        :param segment_security_profile_binding_map: Contains the actual SegmentSecurityProfileBindingMap object
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.segment_security_profile_binding_map = segment_security_profile_binding_map
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildSegmentSecurityProfileBindingMap._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_segment_security_profile_binding_map', {
        'SegmentSecurityProfileBindingMap': type.OptionalType(type.ReferenceType(__name__, 'SegmentSecurityProfileBindingMap')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildSegmentSecurityProfileBindingMap,
    False,
    None))



class ChildService(VapiStruct):
    """
    Child wrapper object for Service, used in hierarchical API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildService"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'Service': 'service',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 service=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildService',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  service: :class:`Service` or ``None``
        :param service: Contains the actual Service object.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.service = service
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildService._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_service', {
        'Service': type.OptionalType(type.ReferenceType(__name__, 'Service')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildService,
    False,
    None))



class ChildServiceEntry(VapiStruct):
    """
    Child wrapper object for ServiceEntry, used in hierarchical API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildServiceEntry"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'Service': 'service',
                            'ServiceEntry': 'service_entry',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 service=None,
                 service_entry=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildServiceEntry',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  service: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param service: This is a deprecated property, Please use 'ServiceEntry' instead.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ServiceEntry`. When methods return a value of this class as
            a return value, the attribute will contain all the attributes
            defined in :class:`ServiceEntry`.
        :type  service_entry: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param service_entry: Contains the actual ServiceEntry object.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ServiceEntry`. When methods return a value of this class as
            a return value, the attribute will contain all the attributes
            defined in :class:`ServiceEntry`.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.service = service
        self.service_entry = service_entry
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildServiceEntry._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_service_entry', {
        'Service': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ServiceEntry')])),
        'ServiceEntry': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ServiceEntry')])),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildServiceEntry,
    False,
    None))



class ChildServiceInstanceEndpoint(VapiStruct):
    """
    Child wrapper object for ServiceInstanceEndpoint used in hierarchical API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildServiceInstanceEndpoint"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'ServiceInstanceEndpoint': 'service_instance_endpoint',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 service_instance_endpoint=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildServiceInstanceEndpoint',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  service_instance_endpoint: :class:`ServiceInstanceEndpoint` or ``None``
        :param service_instance_endpoint: Contains actual ServiceInstanceEndpoint.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.service_instance_endpoint = service_instance_endpoint
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildServiceInstanceEndpoint._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_service_instance_endpoint', {
        'ServiceInstanceEndpoint': type.OptionalType(type.ReferenceType(__name__, 'ServiceInstanceEndpoint')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildServiceInstanceEndpoint,
    False,
    None))



class ChildServiceInterface(VapiStruct):
    """
    Child wrapper object for ServiceInterface, used in hierarchical API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildServiceInterface"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'ServiceInterface': 'service_interface',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 service_interface=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildServiceInterface',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  service_interface: :class:`ServiceInterface` or ``None``
        :param service_interface: Contains the actual ServiceInterface object.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.service_interface = service_interface
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildServiceInterface._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_service_interface', {
        'ServiceInterface': type.OptionalType(type.ReferenceType(__name__, 'ServiceInterface')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildServiceInterface,
    False,
    None))



class ChildServiceReference(VapiStruct):
    """
    Child wrapper object for ServiceReference used in hierarchical API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildServiceReference"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'ServiceReference': 'service_reference',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 service_reference=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildServiceReference',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  service_reference: :class:`ServiceReference` or ``None``
        :param service_reference: Contains actual ServiceReference.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.service_reference = service_reference
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildServiceReference._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_service_reference', {
        'ServiceReference': type.OptionalType(type.ReferenceType(__name__, 'ServiceReference')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildServiceReference,
    False,
    None))



class ChildServiceSegment(VapiStruct):
    """
    Child wrapper object for ServiceSegment, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildServiceSegment"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'ServiceSegment': 'service_segment',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 service_segment=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildServiceSegment',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  service_segment: :class:`ServiceSegment` or ``None``
        :param service_segment: Contains the actual ServiceSegment objects
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.service_segment = service_segment
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildServiceSegment._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_service_segment', {
        'ServiceSegment': type.OptionalType(type.ReferenceType(__name__, 'ServiceSegment')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildServiceSegment,
    False,
    None))



class ChildSessionTimerProfileBindingMap(VapiStruct):
    """
    Child wrapper object for SessionTimerProfileBindingMap, used in
    hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildSessionTimerProfileBindingMap"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'SessionTimerProfileBindingMap': 'session_timer_profile_binding_map',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 session_timer_profile_binding_map=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildSessionTimerProfileBindingMap',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  session_timer_profile_binding_map: :class:`SessionTimerProfileBindingMap` or ``None``
        :param session_timer_profile_binding_map: Contains the actual SessionTimerProfileBindingMap object
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.session_timer_profile_binding_map = session_timer_profile_binding_map
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildSessionTimerProfileBindingMap._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_session_timer_profile_binding_map', {
        'SessionTimerProfileBindingMap': type.OptionalType(type.ReferenceType(__name__, 'SessionTimerProfileBindingMap')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildSessionTimerProfileBindingMap,
    False,
    None))



class ChildSite(VapiStruct):
    """
    Child wrapper object for Site, used in hierarchical API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildSite"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'Site': 'site',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 site=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildSite',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  site: :class:`Site` or ``None``
        :param site: Contains the actual Site object.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.site = site
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildSite._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_site', {
        'Site': type.OptionalType(type.ReferenceType(__name__, 'Site')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildSite,
    False,
    None))



class ChildSpoofGuardProfile(VapiStruct):
    """
    Child wrapper object for SpoofGuardProfile, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildSpoofGuardProfile"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'SpoofGuardProfile': 'spoof_guard_profile',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 spoof_guard_profile=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildSpoofGuardProfile',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  spoof_guard_profile: :class:`SpoofGuardProfile` or ``None``
        :param spoof_guard_profile: Contains the actual SpoofGuardProfile object
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.spoof_guard_profile = spoof_guard_profile
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildSpoofGuardProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_spoof_guard_profile', {
        'SpoofGuardProfile': type.OptionalType(type.ReferenceType(__name__, 'SpoofGuardProfile')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildSpoofGuardProfile,
    False,
    None))



class ChildSslTrustObjectData(VapiStruct):
    """
    Child wrapper for SslTrustObjectData, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildSslTrustObjectData"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'SslTrustObjectData': 'ssl_trust_object_data',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 ssl_trust_object_data=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildSslTrustObjectData',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  ssl_trust_object_data: :class:`SslTrustObjectData` or ``None``
        :param ssl_trust_object_data: Contains the actual SslTrustObjectData object
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.ssl_trust_object_data = ssl_trust_object_data
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildSslTrustObjectData._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_ssl_trust_object_data', {
        'SslTrustObjectData': type.OptionalType(type.ReferenceType(__name__, 'SslTrustObjectData')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildSslTrustObjectData,
    False,
    None))



class ChildStandaloneHostIdfwConfiguration(VapiStruct):
    """
    Wrapper object for StandaloneHostIdfwConfiguration

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildStandaloneHostIdfwConfiguration"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'StandaloneHostIdfwConfiguration': 'standalone_host_idfw_configuration',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 standalone_host_idfw_configuration=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildStandaloneHostIdfwConfiguration',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  standalone_host_idfw_configuration: :class:`StandaloneHostIdfwConfiguration` or ``None``
        :param standalone_host_idfw_configuration: Contains the actual standalone host idfw configuration object.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.standalone_host_idfw_configuration = standalone_host_idfw_configuration
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildStandaloneHostIdfwConfiguration._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_standalone_host_idfw_configuration', {
        'StandaloneHostIdfwConfiguration': type.OptionalType(type.ReferenceType(__name__, 'StandaloneHostIdfwConfiguration')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildStandaloneHostIdfwConfiguration,
    False,
    None))



class ChildStaticARPConfig(VapiStruct):
    """
    Child wrapper object for StaticARPConfig, used in hierarchical API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildStaticARPConfig"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'StaticARPConfig': 'static_arp_config',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 static_arp_config=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildStaticARPConfig',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  static_arp_config: :class:`StaticARPConfig` or ``None``
        :param static_arp_config: Contains the actual StaticARPConfig object.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.static_arp_config = static_arp_config
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildStaticARPConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_static_ARP_config', {
        'StaticARPConfig': type.OptionalType(type.ReferenceType(__name__, 'StaticARPConfig')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildStaticARPConfig,
    False,
    None))



class ChildStaticRouteBfdPeer(VapiStruct):
    """
    Child wrapper for StaticRouteBfdPeer, used in hierarchical API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildStaticRouteBfdPeer"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'BfdPeer': 'bfd_peer',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 bfd_peer=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildStaticRouteBfdPeer',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  bfd_peer: :class:`StaticRouteBfdPeer` or ``None``
        :param bfd_peer: Contains the actual StaticRouteBfdPeer object.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.bfd_peer = bfd_peer
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildStaticRouteBfdPeer._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_static_route_bfd_peer', {
        'BfdPeer': type.OptionalType(type.ReferenceType(__name__, 'StaticRouteBfdPeer')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildStaticRouteBfdPeer,
    False,
    None))



class ChildStaticRoutes(VapiStruct):
    """
    Child wrapper object for StaticRoutes, used in hierarchical API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildStaticRoutes"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'StaticRoutes': 'static_routes',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 static_routes=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildStaticRoutes',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  static_routes: :class:`StaticRoutes` or ``None``
        :param static_routes: Contains the actual StaticRoutes object.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.static_routes = static_routes
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildStaticRoutes._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_static_routes', {
        'StaticRoutes': type.OptionalType(type.ReferenceType(__name__, 'StaticRoutes')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildStaticRoutes,
    False,
    None))



class ChildTier0(VapiStruct):
    """
    Child wrapper object for Tier-0, used in hierarchical API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildTier0"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'Tier0': 'tier0',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 tier0=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildTier0',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  tier0: :class:`Tier0` or ``None``
        :param tier0: Contains the actual Tier-0 object.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.tier0 = tier0
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildTier0._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_tier0', {
        'Tier0': type.OptionalType(type.ReferenceType(__name__, 'Tier0')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildTier0,
    False,
    None))



class ChildTier0DeploymentMap(VapiStruct):
    """
    Child wrapper object for Tier0DeploymentMap, used in hierarchical API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildTier0DeploymentMap"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'Tier0DeploymentMap': 'tier0_deployment_map',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 tier0_deployment_map=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildTier0DeploymentMap',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  tier0_deployment_map: :class:`Tier0DeploymentMap` or ``None``
        :param tier0_deployment_map: Contains the actual Tier0DeploymentMap object.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.tier0_deployment_map = tier0_deployment_map
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildTier0DeploymentMap._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_tier0_deployment_map', {
        'Tier0DeploymentMap': type.OptionalType(type.ReferenceType(__name__, 'Tier0DeploymentMap')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildTier0DeploymentMap,
    False,
    None))



class ChildTier0Interface(VapiStruct):
    """
    Child wrapper object for Tier0Interface, used in hierarchical API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildTier0Interface"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'Tier0Interface': 'tier0_interface',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 tier0_interface=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildTier0Interface',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  tier0_interface: :class:`Tier0Interface` or ``None``
        :param tier0_interface: Contains the actual Tier0Interface object.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.tier0_interface = tier0_interface
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildTier0Interface._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_tier0_interface', {
        'Tier0Interface': type.OptionalType(type.ReferenceType(__name__, 'Tier0Interface')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildTier0Interface,
    False,
    None))



class ChildTier0RouteMap(VapiStruct):
    """
    Child wrapper object for Tier0RouteMap, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildTier0RouteMap"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'Tier0RouteMap': 'tier0_route_map',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 tier0_route_map=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildTier0RouteMap',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  tier0_route_map: :class:`Tier0RouteMap` or ``None``
        :param tier0_route_map: Contains the actual Tier0RouteMap object
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.tier0_route_map = tier0_route_map
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildTier0RouteMap._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_tier0_route_map', {
        'Tier0RouteMap': type.OptionalType(type.ReferenceType(__name__, 'Tier0RouteMap')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildTier0RouteMap,
    False,
    None))



class ChildTier1(VapiStruct):
    """
    Child wrapper object for Tier-1 , used in hierarchical API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildTier1"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'Tier1': 'tier1',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 tier1=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildTier1',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  tier1: :class:`Tier1` or ``None``
        :param tier1: Contains the actual Tier-1 object.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.tier1 = tier1
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildTier1._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_tier1', {
        'Tier1': type.OptionalType(type.ReferenceType(__name__, 'Tier1')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildTier1,
    False,
    None))



class ChildTier1DeploymentMap(VapiStruct):
    """
    Child wrapper object for Tier1DeploymentMap, used in hierarchical API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildTier1DeploymentMap"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'Tier1DeploymentMap': 'tier1_deployment_map',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 tier1_deployment_map=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildTier1DeploymentMap',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  tier1_deployment_map: :class:`Tier1DeploymentMap` or ``None``
        :param tier1_deployment_map: Contains the actual Tier1DeploymentMap object.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.tier1_deployment_map = tier1_deployment_map
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildTier1DeploymentMap._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_tier1_deployment_map', {
        'Tier1DeploymentMap': type.OptionalType(type.ReferenceType(__name__, 'Tier1DeploymentMap')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildTier1DeploymentMap,
    False,
    None))



class ChildTier1Interface(VapiStruct):
    """
    Child wrapper object for Tier1Interface, used in hierarchical API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildTier1Interface"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'Tier1Interface': 'tier1_interface',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 tier1_interface=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildTier1Interface',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  tier1_interface: :class:`Tier1Interface` or ``None``
        :param tier1_interface: Contains the actual Tier1Interface object.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.tier1_interface = tier1_interface
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildTier1Interface._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_tier1_interface', {
        'Tier1Interface': type.OptionalType(type.ReferenceType(__name__, 'Tier1Interface')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildTier1Interface,
    False,
    None))



class ChildTlsCertificate(VapiStruct):
    """
    Child wrapper for TlsCertificate, used in hierarchical API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildTlsCertificate"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'TlsCertificate': 'tls_certificate',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 tls_certificate=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildTlsCertificate',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  tls_certificate: :class:`TlsCertificate` or ``None``
        :param tls_certificate: Contains the actual TlsCertificate object.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.tls_certificate = tls_certificate
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildTlsCertificate._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_tls_certificate', {
        'TlsCertificate': type.OptionalType(type.ReferenceType(__name__, 'TlsCertificate')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildTlsCertificate,
    False,
    None))



class ChildTlsCrl(VapiStruct):
    """
    Child wrapper for TlsCrl, used in hierarchical API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildTlsCrl"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'TlsCrl': 'tls_crl',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 tls_crl=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildTlsCrl',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  tls_crl: :class:`TlsCrl` or ``None``
        :param tls_crl: Contains the actual TlsCrl object.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.tls_crl = tls_crl
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildTlsCrl._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_tls_crl', {
        'TlsCrl': type.OptionalType(type.ReferenceType(__name__, 'TlsCrl')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildTlsCrl,
    False,
    None))



class ChildTlsTrustData(VapiStruct):
    """
    Child wrapper for TlsTrustData, used in hierarchical API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildTlsTrustData"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'TlsTrustData': 'tls_trust_data',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 tls_trust_data=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildTlsTrustData',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  tls_trust_data: :class:`TlsTrustData` or ``None``
        :param tls_trust_data: Contains the actual TlsTrustData object.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.tls_trust_data = tls_trust_data
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildTlsTrustData._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_tls_trust_data', {
        'TlsTrustData': type.OptionalType(type.ReferenceType(__name__, 'TlsTrustData')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildTlsTrustData,
    False,
    None))



class ChildTraceflowConfig(VapiStruct):
    """
    Child wrapper for TraceflowConfig, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildTraceflowConfig"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'TraceflowConfig': 'traceflow_config',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 traceflow_config=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildTraceflowConfig',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  traceflow_config: :class:`TraceflowConfig` or ``None``
        :param traceflow_config: Contains the actual TraceflowConfig object.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.traceflow_config = traceflow_config
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildTraceflowConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_traceflow_config', {
        'TraceflowConfig': type.OptionalType(type.ReferenceType(__name__, 'TraceflowConfig')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildTraceflowConfig,
    False,
    None))



class ChildVhc(VapiStruct):
    """
    Child wrapper object for VHC, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildVhc"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'Vhc': 'vhc',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 vhc=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildVhc',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  vhc: :class:`Vhc` or ``None``
        :param vhc: Contains the actual VHC object
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.vhc = vhc
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildVhc._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_vhc', {
        'Vhc': type.OptionalType(type.ReferenceType(__name__, 'Vhc')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildVhc,
    False,
    None))



class ChildVhcDnsConfig(VapiStruct):
    """
    Child wrapper object for VhcDnsConfig, used in hierarchical API

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildVhcDnsConfig"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'VhcDnsConfig': 'vhc_dns_config',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 vhc_dns_config=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildVhcDnsConfig',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  vhc_dns_config: :class:`VhcDnsConfig` or ``None``
        :param vhc_dns_config: Contains the actual VhcDnsConfig object
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.vhc_dns_config = vhc_dns_config
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildVhcDnsConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_vhc_dns_config', {
        'VhcDnsConfig': type.OptionalType(type.ReferenceType(__name__, 'VhcDnsConfig')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildVhcDnsConfig,
    False,
    None))



class ChildVirtualEndpoint(VapiStruct):
    """
    Child wrapper object for VirtualEndpoint used in hierarchical API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildVirtualEndpoint"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'VirtualEndpoint': 'virtual_endpoint',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 virtual_endpoint=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildVirtualEndpoint',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  virtual_endpoint: :class:`VirtualEndpoint` or ``None``
        :param virtual_endpoint: Contains reference to actual VirtualEndpoint.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.virtual_endpoint = virtual_endpoint
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildVirtualEndpoint._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_virtual_endpoint', {
        'VirtualEndpoint': type.OptionalType(type.ReferenceType(__name__, 'VirtualEndpoint')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildVirtualEndpoint,
    False,
    None))



class ChildVniPoolConfig(VapiStruct):
    """
    Child wrapper object for VniPoolConfig, used in hierarchical API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ChildVniPoolConfig"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'VniPoolConfig': 'vni_pool_config',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'mark_for_override': 'mark_for_override',
                            'marked_for_delete': 'marked_for_delete',
                            }

    def __init__(self,
                 vni_pool_config=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ChildVniPoolConfig',
                 tags=None,
                 mark_for_override=None,
                 marked_for_delete=None,
                ):
        """
        :type  vni_pool_config: :class:`VniPoolConfig` or ``None``
        :param vni_pool_config: Contains the actual VniPoolConfig object.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  mark_for_override: :class:`bool` or ``None``
        :param mark_for_override: Indicates whether this object is the overridden intent object
            Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: If this field is set to true, delete operation is triggered on the
            intent tree. This resource along with its all children in intent
            tree will be deleted. This is a cascade delete and should only be
            used if intent object along with its all children are to be
            deleted. This does not support deletion of single non-leaf node
            within the tree and should be used carefully.
        """
        self.vni_pool_config = vni_pool_config
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.mark_for_override = mark_for_override
        self.marked_for_delete = marked_for_delete
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ChildVniPoolConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.child_vni_pool_config', {
        'VniPoolConfig': type.OptionalType(type.ReferenceType(__name__, 'VniPoolConfig')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'mark_for_override': type.OptionalType(type.BooleanType()),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
    },
    ChildVniPoolConfig,
    False,
    None))



class ClasslessStaticRoute(VapiStruct):
    """
    DHCP classless static route option.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'network': 'network',
                            'next_hop': 'next_hop',
                            }

    def __init__(self,
                 network=None,
                 next_hop=None,
                ):
        """
        :type  network: :class:`str` or ``None``
        :param network: Destination network in CIDR format. format:
            address-or-block-or-range
        :type  next_hop: :class:`str` or ``None``
        :param next_hop: IP address of next hop of the route. format: ip
        """
        self.network = network
        self.next_hop = next_hop
        VapiStruct.__init__(self)


ClasslessStaticRoute._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.classless_static_route', {
        'network': type.OptionalType(type.StringType()),
        'next_hop': type.OptionalType(type.StringType()),
    },
    ClasslessStaticRoute,
    False,
    None))



class CloudNativeServiceInstance(VapiStruct):
    """
    Stores the information about cloud native service instance.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'external_id': 'external_id',
                            'service_type': 'service_type',
                            'source': 'source',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_last_sync_time': 'last_sync_time',
                            'description': 'description',
                            'display_name': 'display_name',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            }

    def __init__(self,
                 external_id=None,
                 service_type=None,
                 source=None,
                 links=None,
                 schema=None,
                 self_=None,
                 last_sync_time=None,
                 description=None,
                 display_name=None,
                 resource_type=None,
                 tags=None,
                ):
        """
        :type  external_id: :class:`str` or ``None``
        :param external_id: Id of service instance fetched from public cloud.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  service_type: :class:`str` or ``None``
        :param service_type: Type of cloud native service.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  source: :class:`ResourceReference` or ``None``
        :param source: Reference of the public cloud gateway that reported the service
            instance.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  last_sync_time: :class:`long` or ``None``
        :param last_sync_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  resource_type: :class:`str`
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        """
        self.external_id = external_id
        self.service_type = service_type
        self.source = source
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.last_sync_time = last_sync_time
        self.description = description
        self.display_name = display_name
        self._resource_type = resource_type
        self.tags = tags
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

CloudNativeServiceInstance._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.cloud_native_service_instance', {
        'external_id': type.OptionalType(type.StringType()),
        'service_type': type.OptionalType(type.StringType()),
        'source': type.OptionalType(type.ReferenceType(__name__, 'ResourceReference')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_last_sync_time': type.OptionalType(type.IntegerType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
    },
    CloudNativeServiceInstance,
    False,
    None))



class ClusterBackupInfo(VapiStruct):
    """
    Cluster backup details

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    RESTORE_TYPE_REGULAR_RESTORE = "REGULAR_RESTORE"
    """


    """
    RESTORE_TYPE_POLICY_ONLY_RESTORE = "POLICY_ONLY_RESTORE"
    """


    """



    _canonical_to_pep_names = {
                            'ip_address': 'ip_address',
                            'node_id': 'node_id',
                            'restore_type': 'restore_type',
                            'timestamp': 'timestamp',
                            }

    def __init__(self,
                 ip_address=None,
                 node_id=None,
                 restore_type=None,
                 timestamp=None,
                ):
        """
        :type  ip_address: :class:`str` or ``None``
        :param ip_address: IP address or FQDN of the node from which the backup was taken
            format: hostname-or-ip
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  node_id: :class:`str` or ``None``
        :param node_id: ID of the node from which the backup was taken
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  restore_type: :class:`list` of :class:`str` or ``None``
        :param restore_type: Possible values are: 
            
            * :attr:`ClusterBackupInfo.RESTORE_TYPE_REGULAR_RESTORE`
            * :attr:`ClusterBackupInfo.RESTORE_TYPE_POLICY_ONLY_RESTORE`
            
             Type of restore allowed
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  timestamp: :class:`long` or ``None``
        :param timestamp: timestamp of the cluster backup file format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.ip_address = ip_address
        self.node_id = node_id
        self.restore_type = restore_type
        self.timestamp = timestamp
        VapiStruct.__init__(self)


ClusterBackupInfo._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.cluster_backup_info', {
        'ip_address': type.OptionalType(type.StringType()),
        'node_id': type.OptionalType(type.StringType()),
        'restore_type': type.OptionalType(type.ListType(type.StringType())),
        'timestamp': type.OptionalType(type.IntegerType()),
    },
    ClusterBackupInfo,
    False,
    None))



class ClusterBackupInfoListResult(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`ClusterBackupInfo` or ``None``
        :param results: List of timestamps of backed-up cluster files
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


ClusterBackupInfoListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.cluster_backup_info_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ClusterBackupInfo'))),
    },
    ClusterBackupInfoListResult,
    False,
    None))



class ClusterRestoreStatus(VapiStruct):
    """
    Cluster restore status

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'backup_timestamp': 'backup_timestamp',
                            'endpoints': 'endpoints',
                            'id': 'id',
                            'instructions': 'instructions',
                            'restore_end_time': 'restore_end_time',
                            'restore_start_time': 'restore_start_time',
                            'status': 'status',
                            'step': 'step',
                            'total_steps': 'total_steps',
                            }

    def __init__(self,
                 backup_timestamp=None,
                 endpoints=None,
                 id=None,
                 instructions=None,
                 restore_end_time=None,
                 restore_start_time=None,
                 status=None,
                 step=None,
                 total_steps=None,
                ):
        """
        :type  backup_timestamp: :class:`long` or ``None``
        :param backup_timestamp: Timestamp when backup was initiated in epoch millisecond format:
            int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  endpoints: :class:`list` of :class:`ResourceLink` or ``None``
        :param endpoints: The list of allowed endpoints, based on the current state of the
            restore process
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  id: :class:`str` or ``None``
        :param id: Unique id for backup request
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  instructions: :class:`list` of :class:`InstructionInfo` or ``None``
        :param instructions: Instructions for users to reconcile Restore operations
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  restore_end_time: :class:`long` or ``None``
        :param restore_end_time: Timestamp when restore was completed in epoch millisecond format:
            int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  restore_start_time: :class:`long` or ``None``
        :param restore_start_time: Timestamp when restore was started in epoch millisecond format:
            int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  status: :class:`GlobalRestoreStatus` or ``None``
        :param status: 
        :type  step: :class:`RestoreStep` or ``None``
        :param step: 
        :type  total_steps: :class:`long` or ``None``
        :param total_steps: Total number of steps in the entire restore process format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.backup_timestamp = backup_timestamp
        self.endpoints = endpoints
        self.id = id
        self.instructions = instructions
        self.restore_end_time = restore_end_time
        self.restore_start_time = restore_start_time
        self.status = status
        self.step = step
        self.total_steps = total_steps
        VapiStruct.__init__(self)


ClusterRestoreStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.cluster_restore_status', {
        'backup_timestamp': type.OptionalType(type.IntegerType()),
        'endpoints': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        'id': type.OptionalType(type.StringType()),
        'instructions': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'InstructionInfo'))),
        'restore_end_time': type.OptionalType(type.IntegerType()),
        'restore_start_time': type.OptionalType(type.IntegerType()),
        'status': type.OptionalType(type.ReferenceType(__name__, 'GlobalRestoreStatus')),
        'step': type.OptionalType(type.ReferenceType(__name__, 'RestoreStep')),
        'total_steps': type.OptionalType(type.IntegerType()),
    },
    ClusterRestoreStatus,
    False,
    None))



class ColumnItem(VapiStruct):
    """
    Represents a column of the Grid

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    TYPE_STRING = "String"
    """


    """
    TYPE_NUMBER = "Number"
    """


    """
    TYPE_DATE = "Date"
    """


    """



    _canonical_to_pep_names = {
                            'column_identifier': 'column_identifier',
                            'drilldown_id': 'drilldown_id',
                            'field': 'field',
                            'hidden': 'hidden',
                            'label': 'label',
                            'navigation': 'navigation',
                            'render_configuration': 'render_configuration',
                            'sort_ascending': 'sort_ascending',
                            'sort_key': 'sort_key',
                            'tooltip': 'tooltip',
                            'type': 'type',
                            }

    def __init__(self,
                 column_identifier=None,
                 drilldown_id=None,
                 field=None,
                 hidden=None,
                 label=None,
                 navigation=None,
                 render_configuration=None,
                 sort_ascending=None,
                 sort_key=None,
                 tooltip=None,
                 type=None,
                ):
        """
        :type  column_identifier: :class:`str` or ``None``
        :param column_identifier: Identifies the column and used for fetching content upon an user
            click or drilldown. If column identifier is not provided, the
            column's data will not participate in searches and drilldowns.
        :type  drilldown_id: :class:`str` or ``None``
        :param drilldown_id: Id of drilldown widget, if any. Id should be a valid id of an
            existing widget.
        :type  field: :class:`str` or ``None``
        :param field: Field from which values of the column will be derived.
        :type  hidden: :class:`bool` or ``None``
        :param hidden: If set to true, hides the column
        :type  label: :class:`Label` or ``None``
        :param label: Label of the column.
        :type  navigation: :class:`str` or ``None``
        :param navigation: Hyperlink of the specified UI page that provides details. If
            drilldown_id is provided, then navigation cannot be used.
        :type  render_configuration: :class:`list` of :class:`RenderConfiguration` or ``None``
        :param render_configuration: Render configuration to be applied, if any.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, the value of the column are sorted in ascending order.
            Otherwise, in descending order.
        :type  sort_key: :class:`str` or ``None``
        :param sort_key: Sorting on column is based on the sort_key. sort_key represents the
            field in the output data on which sort is requested.
        :type  tooltip: :class:`list` of :class:`Tooltip` or ``None``
        :param tooltip: Multi-line text to be shown on tooltip while hovering over a cell
            in the grid.
        :type  type: :class:`str` or ``None``
        :param type: Possible values are: 
            
            * :attr:`ColumnItem.TYPE_STRING`
            * :attr:`ColumnItem.TYPE_NUMBER`
            * :attr:`ColumnItem.TYPE_DATE`
            
             Data type of the field.
        """
        self.column_identifier = column_identifier
        self.drilldown_id = drilldown_id
        self.field = field
        self.hidden = hidden
        self.label = label
        self.navigation = navigation
        self.render_configuration = render_configuration
        self.sort_ascending = sort_ascending
        self.sort_key = sort_key
        self.tooltip = tooltip
        self.type = type
        VapiStruct.__init__(self)


ColumnItem._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.column_item', {
        'column_identifier': type.OptionalType(type.StringType()),
        'drilldown_id': type.OptionalType(type.StringType()),
        'field': type.OptionalType(type.StringType()),
        'hidden': type.OptionalType(type.BooleanType()),
        'label': type.OptionalType(type.ReferenceType(__name__, 'Label')),
        'navigation': type.OptionalType(type.StringType()),
        'render_configuration': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'RenderConfiguration'))),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_key': type.OptionalType(type.StringType()),
        'tooltip': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tooltip'))),
        'type': type.OptionalType(type.StringType()),
    },
    ColumnItem,
    False,
    None))



class CommunicationEntry(VapiStruct):
    """
    A communication entry indicates the action to be performed for various
    types of traffic flowing between workload groups. This type is deprecated.
    Use the type Rule instead.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    ACTION_ALLOW = "ALLOW"
    """


    """
    ACTION_DROP = "DROP"
    """


    """
    ACTION_REJECT = "REJECT"
    """


    """
    DIRECTION_IN = "IN"
    """


    """
    DIRECTION_OUT = "OUT"
    """


    """
    DIRECTION_IN_OUT = "IN_OUT"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'action': 'action',
                            'destination_groups': 'destination_groups',
                            'direction': 'direction',
                            'disabled': 'disabled',
                            'logged': 'logged',
                            'notes': 'notes',
                            'scope': 'scope',
                            'sequence_number': 'sequence_number',
                            'services': 'services',
                            'source_groups': 'source_groups',
                            'tag': 'tag',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 action=None,
                 destination_groups=None,
                 direction=None,
                 disabled=None,
                 logged=None,
                 notes=None,
                 scope=None,
                 sequence_number=None,
                 services=None,
                 source_groups=None,
                 tag=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  action: :class:`str` or ``None``
        :param action: Possible values are: 
            
            * :attr:`CommunicationEntry.ACTION_ALLOW`
            * :attr:`CommunicationEntry.ACTION_DROP`
            * :attr:`CommunicationEntry.ACTION_REJECT`
            
             The action to be applied to all the services.
        :type  destination_groups: :class:`list` of :class:`str` or ``None``
        :param destination_groups: We need paths as duplicate names may exist for groups under
            different domains.In order to specify all groups, use the constant
            \"ANY\". This is case insensitive. If \"ANY\" is used, it should be
            the ONLY element in the group array. Error will be thrown if ANY is
            used in conjunction with other values.
        :type  direction: :class:`str` or ``None``
        :param direction: Possible values are: 
            
            * :attr:`CommunicationEntry.DIRECTION_IN`
            * :attr:`CommunicationEntry.DIRECTION_OUT`
            * :attr:`CommunicationEntry.DIRECTION_IN_OUT`
            
             Define direction of traffic.
        :type  disabled: :class:`bool` or ``None``
        :param disabled: Flag to disable the rule. Default is enabled.
        :type  logged: :class:`bool` or ``None``
        :param logged: Flag to enable packet logging. Default is disabled.
        :type  notes: :class:`str` or ``None``
        :param notes: Text for additional notes on changes.
        :type  scope: :class:`list` of :class:`str` or ``None``
        :param scope: The list of policy paths where the communication entry is applied
            Edge/LR/T0/T1/LRP/CGW/MGW/etc. Note that a given rule can be
            applied on multiple LRs/LRPs.
        :type  sequence_number: :class:`long` or ``None``
        :param sequence_number: This field is used to resolve conflicts between multiple
            CommunicationEntries under CommunicationMap for a Domain If no
            sequence number is specified in the payload, a value of 0 is
            assigned by default. If there are multiple communication entries
            with the same sequence number then their order is not
            deterministic. If a specific order of communication entry is
            desired, then one has to specify unique sequence numbers or use the
            POST request on the communication entry entity with a query
            parameter action=revise to let the framework assign a sequence
            number format: int32
        :type  services: :class:`list` of :class:`str` or ``None``
        :param services: In order to specify all services, use the constant \"ANY\". This is
            case insensitive. If \"ANY\" is used, it should be the ONLY element
            in the services array. Error will be thrown if ANY is used in
            conjunction with other values.
        :type  source_groups: :class:`list` of :class:`str` or ``None``
        :param source_groups: We need paths as duplicate names may exist for groups under
            different domains. In order to specify all groups, use the constant
            \"ANY\". This is case insensitive. If \"ANY\" is used, it should be
            the ONLY element in the group array. Error will be thrown if ANY is
            used in conjunction with other values.
        :type  tag: :class:`str` or ``None``
        :param tag: User level field which will be printed in CLI and packet logs.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.action = action
        self.destination_groups = destination_groups
        self.direction = direction
        self.disabled = disabled
        self.logged = logged
        self.notes = notes
        self.scope = scope
        self.sequence_number = sequence_number
        self.services = services
        self.source_groups = source_groups
        self.tag = tag
        VapiStruct.__init__(self)


CommunicationEntry._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.communication_entry', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'action': type.OptionalType(type.StringType()),
        'destination_groups': type.OptionalType(type.ListType(type.StringType())),
        'direction': type.OptionalType(type.StringType()),
        'disabled': type.OptionalType(type.BooleanType()),
        'logged': type.OptionalType(type.BooleanType()),
        'notes': type.OptionalType(type.StringType()),
        'scope': type.OptionalType(type.ListType(type.StringType())),
        'sequence_number': type.OptionalType(type.IntegerType()),
        'services': type.OptionalType(type.ListType(type.StringType())),
        'source_groups': type.OptionalType(type.ListType(type.StringType())),
        'tag': type.OptionalType(type.StringType()),
    },
    CommunicationEntry,
    False,
    None))



class CommunicationEntryListResult(VapiStruct):
    """
    This type is deprecated. Use the type RuleListResult instead.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`CommunicationEntry` or ``None``
        :param results: CommunicationEntry list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


CommunicationEntryListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.communication_entry_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'CommunicationEntry'))),
    },
    CommunicationEntryListResult,
    False,
    None))



class CommunicationInsertParameters(VapiStruct):
    """
    Parameters to let the admin specify a relative position of a communication
    map or communication entry w.r.t to another one. This type is deprecated.
    Use the type RuleInsertParameters instead.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    OPERATION_TOP = "insert_top"
    """


    """
    OPERATION_BOTTOM = "insert_bottom"
    """


    """
    OPERATION_AFTER = "insert_after"
    """


    """
    OPERATION_BEFORE = "insert_before"
    """


    """



    _canonical_to_pep_names = {
                            'anchor_path': 'anchor_path',
                            'operation': 'operation',
                            }

    def __init__(self,
                 anchor_path=None,
                 operation=None,
                ):
        """
        :type  anchor_path: :class:`str` or ``None``
        :param anchor_path: The communication map/communication entry path if operation is
            'insert_after' or 'insert_before'
        :type  operation: :class:`str` or ``None``
        :param operation: Possible values are: 
            
            * :attr:`CommunicationInsertParameters.OPERATION_TOP`
            * :attr:`CommunicationInsertParameters.OPERATION_BOTTOM`
            * :attr:`CommunicationInsertParameters.OPERATION_AFTER`
            * :attr:`CommunicationInsertParameters.OPERATION_BEFORE`
            
             Operation
        """
        self.anchor_path = anchor_path
        self.operation = operation
        VapiStruct.__init__(self)


CommunicationInsertParameters._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.communication_insert_parameters', {
        'anchor_path': type.OptionalType(type.StringType()),
        'operation': type.OptionalType(type.StringType()),
    },
    CommunicationInsertParameters,
    False,
    None))



class CommunicationMap(VapiStruct):
    """
    Ordered list of CommunicationEntries. This object is created by default
    along with the Domain. This type is deprecated. Use the type SecurityPolicy
    instead.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'category': 'category',
                            'communication_entries': 'communication_entries',
                            'precedence': 'precedence',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 category=None,
                 communication_entries=None,
                 precedence=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  category: :class:`str` or ``None``
        :param category: - Distributed Firewall - Policy framework for Distributed Firewall
            provides four pre-defined categories for classifying a
            communication map. They are \"Emergency\", \"Infrastructure\",
            \"Environment\" and \"Application\". Amongst the layer 3
            communication maps,there is a pre-determined order in which the
            policy framework manages the priority of these communication maps.
            Emergency category has the highest priority followed by
            Infrastructure, Environment and then Application rules.
            Administrator can choose to categorize a communication map into the
            above categories or can choose to leave it empty. If empty it will
            have the least precedence w.r.t the above four layer 3 categories.
        :type  communication_entries: :class:`list` of :class:`CommunicationEntry` or ``None``
        :param communication_entries: CommunicationEntries that are a part of this CommunicationMap
        :type  precedence: :class:`long` or ``None``
        :param precedence: This field is used to resolve conflicts between communication maps
            across domains. In order to change the precedence of a
            communication map one can fire a POST request on the communication
            map entity with a query parameter action=revise The precedence
            field will reflect the value of the computed precedence upon
            execution of the above mentioned POST request. For scenarios where
            the administrator is using a template to update several
            communication maps, the only way to set the precedence is to
            explicitly specify the precedence number for each communication
            map. If no precedence is specified in the payload, a value of 0 is
            assigned by default. If there are multiple communication maps with
            the same precedence then their order is not deterministic. If a
            specific order of communication map is desired, then one has to
            specify a unique precedence or use the POST request on the
            communication map entity with a query parameter action=revise to
            let the framework assign a precedence format: int32
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.category = category
        self.communication_entries = communication_entries
        self.precedence = precedence
        VapiStruct.__init__(self)


CommunicationMap._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.communication_map', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'category': type.OptionalType(type.StringType()),
        'communication_entries': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'CommunicationEntry'))),
        'precedence': type.OptionalType(type.IntegerType()),
    },
    CommunicationMap,
    False,
    None))



class CommunicationMapListResult(VapiStruct):
    """
    This type is deprecated. Use the type SecurityPolicyListResult instead.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`CommunicationMap` or ``None``
        :param results: CommunicationMap list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


CommunicationMapListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.communication_map_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'CommunicationMap'))),
    },
    CommunicationMapListResult,
    False,
    None))



class CommunityList(VapiStruct):
    """
    Community list for BGP routing configuration

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'communities': 'communities',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 communities=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  communities: :class:`list` of :class:`str` or ``None``
        :param communities: List of BGP community entries. Both standard and large communities
            are supported. Standard community format: aa:nn where aa and nn
            must be within the range [1 - 65536]. Large BGP Community format:
            aa:bb:nn where aa (Global Administrator), bb (Local Data Part 1)
            and nn (Local Data Part 2) must be within the range [1 -
            4294967295]. In additon to numbered communites (e.g. 3356:2040),
            predefined communities (NO_EXPORT, NO_ADVERTISE,
            NO_EXPORT_SUBCONFED) are supported.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.communities = communities
        VapiStruct.__init__(self)


CommunityList._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.community_list', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'communities': type.OptionalType(type.ListType(type.StringType())),
    },
    CommunityList,
    False,
    None))



class CommunityListListResult(VapiStruct):
    """
    Paged collection of CommunityLists

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`CommunityList` or ``None``
        :param results: CommunityList results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


CommunityListListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.community_list_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'CommunityList'))),
    },
    CommunityListListResult,
    False,
    None))



class CommunityMatchCriteria(VapiStruct):
    """
    Match criteria based on a community list

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    MATCH_OPERATOR_ANY = "MATCH_ANY"
    """


    """
    MATCH_OPERATOR_ALL = "MATCH_ALL"
    """


    """
    MATCH_OPERATOR_EXACT = "MATCH_EXACT"
    """


    """
    MATCH_OPERATOR_COMMUNITY_REGEX = "MATCH_COMMUNITY_REGEX"
    """


    """
    MATCH_OPERATOR_LARGE_COMMUNITY_REGEX = "MATCH_LARGE_COMMUNITY_REGEX"
    """


    """



    _canonical_to_pep_names = {
                            'criteria': 'criteria',
                            'match_operator': 'match_operator',
                            }

    def __init__(self,
                 criteria=None,
                 match_operator=None,
                ):
        """
        :type  criteria: :class:`str` or ``None``
        :param criteria: Match criteria specified as a community list path or a regular
            expression.
        :type  match_operator: :class:`str` or ``None``
        :param match_operator: Possible values are: 
            
            * :attr:`CommunityMatchCriteria.MATCH_OPERATOR_ANY`
            * :attr:`CommunityMatchCriteria.MATCH_OPERATOR_ALL`
            * :attr:`CommunityMatchCriteria.MATCH_OPERATOR_EXACT`
            * :attr:`CommunityMatchCriteria.MATCH_OPERATOR_COMMUNITY_REGEX`
            *
              :attr:`CommunityMatchCriteria.MATCH_OPERATOR_LARGE_COMMUNITY_REGEX`
            
            Match operator for community list entries. Not valid when a regular
            expression is specified for criteria.
        """
        self.criteria = criteria
        self.match_operator = match_operator
        VapiStruct.__init__(self)


CommunityMatchCriteria._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.community_match_criteria', {
        'criteria': type.OptionalType(type.StringType()),
        'match_operator': type.OptionalType(type.StringType()),
    },
    CommunityMatchCriteria,
    False,
    None))



class ComputeClusterIdfwConfiguration(VapiStruct):
    """
    Idfw configuration for enable/disable idfw on cluster level.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'cluster_idfw_enabled': 'cluster_idfw_enabled',
                            'member': 'member',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 cluster_idfw_enabled=None,
                 member=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  cluster_idfw_enabled: :class:`bool` or ``None``
        :param cluster_idfw_enabled: If set to true, idfw is enabled for this cluster
        :type  member: :class:`PolicyResourceReference` or ``None``
        :param member: Contains actual policy resource reference object
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.cluster_idfw_enabled = cluster_idfw_enabled
        self.member = member
        VapiStruct.__init__(self)


ComputeClusterIdfwConfiguration._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.compute_cluster_idfw_configuration', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'cluster_idfw_enabled': type.OptionalType(type.BooleanType()),
        'member': type.OptionalType(type.ReferenceType(__name__, 'PolicyResourceReference')),
    },
    ComputeClusterIdfwConfiguration,
    False,
    None))



class ComputeClusterIdfwConfigurationListResult(VapiStruct):
    """
    Paged collection of compute cluster idfw configuration

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`ComputeClusterIdfwConfiguration` or ``None``
        :param results: Compute cluster wise identity firewall configuration list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


ComputeClusterIdfwConfigurationListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.compute_cluster_idfw_configuration_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ComputeClusterIdfwConfiguration'))),
    },
    ComputeClusterIdfwConfigurationListResult,
    False,
    None))



class ComputeCollection(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'cm_local_id': 'cm_local_id',
                            'external_id': 'external_id',
                            'origin_id': 'origin_id',
                            'origin_properties': 'origin_properties',
                            'origin_type': 'origin_type',
                            'owner_id': 'owner_id',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_last_sync_time': 'last_sync_time',
                            'description': 'description',
                            'display_name': 'display_name',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            }

    def __init__(self,
                 cm_local_id=None,
                 external_id=None,
                 origin_id=None,
                 origin_properties=None,
                 origin_type=None,
                 owner_id=None,
                 links=None,
                 schema=None,
                 self_=None,
                 last_sync_time=None,
                 description=None,
                 display_name=None,
                 resource_type=None,
                 tags=None,
                ):
        """
        :type  cm_local_id: :class:`str` or ``None``
        :param cm_local_id: Local Id of the compute collection in the Compute Manager
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  external_id: :class:`str` or ``None``
        :param external_id: External ID of the ComputeCollection in the source Compute manager,
            e.g. mo-ref in VC
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  origin_id: :class:`str` or ``None``
        :param origin_id: Id of the compute manager from where this Compute Collection was
            discovered
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  origin_properties: :class:`list` of :class:`KeyValuePair` or ``None``
        :param origin_properties: Key-Value map of additional specific properties of compute
            collection in the Compute Manager
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  origin_type: :class:`str` or ``None``
        :param origin_type: ComputeCollection type like VC_Cluster. Here the Compute Manager
            type prefix would help in differentiating similar named Compute
            Collection types from different Compute Managers
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  owner_id: :class:`str` or ``None``
        :param owner_id: Id of the owner of compute collection in the Compute Manager
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  last_sync_time: :class:`long` or ``None``
        :param last_sync_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  resource_type: :class:`str`
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        """
        self.cm_local_id = cm_local_id
        self.external_id = external_id
        self.origin_id = origin_id
        self.origin_properties = origin_properties
        self.origin_type = origin_type
        self.owner_id = owner_id
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.last_sync_time = last_sync_time
        self.description = description
        self.display_name = display_name
        self._resource_type = resource_type
        self.tags = tags
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ComputeCollection._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.compute_collection', {
        'cm_local_id': type.OptionalType(type.StringType()),
        'external_id': type.OptionalType(type.StringType()),
        'origin_id': type.OptionalType(type.StringType()),
        'origin_properties': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'KeyValuePair'))),
        'origin_type': type.OptionalType(type.StringType()),
        'owner_id': type.OptionalType(type.StringType()),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_last_sync_time': type.OptionalType(type.IntegerType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
    },
    ComputeCollection,
    False,
    None))



class Condition(VapiStruct):
    """
    Represents the leaf level condition. Evaluation of the condition expression
    will be case insensitive.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "Condition"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    KEY_TAG = "Tag"
    """


    """
    KEY_NAME = "Name"
    """


    """
    KEY_OSNAME = "OSName"
    """


    """
    KEY_COMPUTERNAME = "ComputerName"
    """


    """
    MEMBER_TYPE_IPSET = "IPSet"
    """


    """
    MEMBER_TYPE_VIRTUALMACHINE = "VirtualMachine"
    """


    """
    MEMBER_TYPE_LOGICALPORT = "LogicalPort"
    """


    """
    MEMBER_TYPE_LOGICALSWITCH = "LogicalSwitch"
    """


    """
    MEMBER_TYPE_SEGMENT = "Segment"
    """


    """
    MEMBER_TYPE_SEGMENTPORT = "SegmentPort"
    """


    """
    OPERATOR_EQUALS = "EQUALS"
    """


    """
    OPERATOR_CONTAINS = "CONTAINS"
    """


    """
    OPERATOR_STARTSWITH = "STARTSWITH"
    """


    """
    OPERATOR_ENDSWITH = "ENDSWITH"
    """


    """
    OPERATOR_NOTEQUALS = "NOTEQUALS"
    """


    """



    _canonical_to_pep_names = {
                            'key': 'key',
                            'member_type': 'member_type',
                            'operator': 'operator',
                            'value': 'value',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            }

    def __init__(self,
                 key=None,
                 member_type=None,
                 operator=None,
                 value=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='Condition',
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                ):
        """
        :type  key: :class:`str` or ``None``
        :param key: Possible values are: 
            
            * :attr:`Condition.KEY_TAG`
            * :attr:`Condition.KEY_NAME`
            * :attr:`Condition.KEY_OSNAME`
            * :attr:`Condition.KEY_COMPUTERNAME`
            
             Key
        :type  member_type: :class:`str` or ``None``
        :param member_type: Possible values are: 
            
            * :attr:`Condition.MEMBER_TYPE_IPSET`
            * :attr:`Condition.MEMBER_TYPE_VIRTUALMACHINE`
            * :attr:`Condition.MEMBER_TYPE_LOGICALPORT`
            * :attr:`Condition.MEMBER_TYPE_LOGICALSWITCH`
            * :attr:`Condition.MEMBER_TYPE_SEGMENT`
            * :attr:`Condition.MEMBER_TYPE_SEGMENTPORT`
            
             Group member type
        :type  operator: :class:`str` or ``None``
        :param operator: Possible values are: 
            
            * :attr:`Condition.OPERATOR_EQUALS`
            * :attr:`Condition.OPERATOR_CONTAINS`
            * :attr:`Condition.OPERATOR_STARTSWITH`
            * :attr:`Condition.OPERATOR_ENDSWITH`
            * :attr:`Condition.OPERATOR_NOTEQUALS`
            
             operator
        :type  value: :class:`str` or ``None``
        :param value: Value
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`Expression.RESOURCE_TYPE_CONDITION`
            * :attr:`Expression.RESOURCE_TYPE_CONJUNCTIONOPERATOR`
            * :attr:`Expression.RESOURCE_TYPE_NESTEDEXPRESSION`
            * :attr:`Expression.RESOURCE_TYPE_IPADDRESSEXPRESSION`
            * :attr:`Expression.RESOURCE_TYPE_MACADDRESSEXPRESSION`
            * :attr:`Expression.RESOURCE_TYPE_EXTERNALIDEXPRESSION`
            * :attr:`Expression.RESOURCE_TYPE_PATHEXPRESSION`
            * :attr:`Expression.RESOURCE_TYPE_IDENTITYGROUPEXPRESSION`
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.key = key
        self.member_type = member_type
        self.operator = operator
        self.value = value
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

Condition._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.condition', {
        'key': type.OptionalType(type.StringType()),
        'member_type': type.OptionalType(type.StringType()),
        'operator': type.OptionalType(type.StringType()),
        'value': type.OptionalType(type.StringType()),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
    },
    Condition,
    False,
    None))



class ConditionalValueConstraintExpression(VapiStruct):
    """
    Represents the leaf level expression to restrict the target attribute value
    based on the set of existing values. Generally, used in combination with
    RelatedAttributeConditionalExpression to constraint the values related to
    another attribute on the same resource. This object is always used in
    conjunction with some exression. Example - { \"condition\" : {
    \"operator\":\"INCLUDES\", \"rhs_value\":
    [\"/infra/domains/mgw/groups/VCENTER\", \"/infra/domains/mgw/groups/SRM\",
    \"/infra/domains/mgw/groups/NSX\"], \"value_constraint\": {
    \"resource_type\": \"ValueConstraintExpression\",
    \"operator\":\"EXCLUDES\",
    \"values\":[\"/infra/domains/mgw/groups/VCENTER\",
    \"/infra/domains/mgw/groups/SRM\", \"/infra/domains/mgw/groups/NSX\"] } }

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    OPERATOR_INCLUDES = "INCLUDES"
    """


    """
    OPERATOR_EXCLUDES = "EXCLUDES"
    """


    """
    OPERATOR_EQUALS = "EQUALS"
    """


    """



    _canonical_to_pep_names = {
                            'operator': 'operator',
                            'rhs_value': 'rhs_value',
                            'value_constraint': 'value_constraint',
                            }

    def __init__(self,
                 operator=None,
                 rhs_value=None,
                 value_constraint=None,
                ):
        """
        :type  operator: :class:`str` or ``None``
        :param operator: Possible values are: 
            
            * :attr:`ConditionalValueConstraintExpression.OPERATOR_INCLUDES`
            * :attr:`ConditionalValueConstraintExpression.OPERATOR_EXCLUDES`
            * :attr:`ConditionalValueConstraintExpression.OPERATOR_EQUALS`
            
             Set operation to constraint values.
        :type  rhs_value: :class:`list` of :class:`str` or ``None``
        :param rhs_value: List of values.
        :type  value_constraint: :class:`ValueConstraintExpression` or ``None``
        :param value_constraint: Values to apply the conditional constraint on target.
        """
        self.operator = operator
        self.rhs_value = rhs_value
        self.value_constraint = value_constraint
        VapiStruct.__init__(self)


ConditionalValueConstraintExpression._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.conditional_value_constraint_expression', {
        'operator': type.OptionalType(type.StringType()),
        'rhs_value': type.OptionalType(type.ListType(type.StringType())),
        'value_constraint': type.OptionalType(type.ReferenceType(__name__, 'ValueConstraintExpression')),
    },
    ConditionalValueConstraintExpression,
    False,
    None))



class ConfigurationState(VapiStruct):
    """
    Describes status of configuration of an entity

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    STATE_PENDING = "pending"
    """


    """
    STATE_IN_PROGRESS = "in_progress"
    """


    """
    STATE_SUCCESS = "success"
    """


    """
    STATE_FAILED = "failed"
    """


    """
    STATE_PARTIAL_SUCCESS = "partial_success"
    """


    """
    STATE_ORPHANED = "orphaned"
    """


    """
    STATE_UNKNOWN = "unknown"
    """


    """
    STATE_ERROR = "error"
    """


    """
    STATE_IN_SYNC = "in_sync"
    """


    """
    STATE_NOT_AVAILABLE = "NOT_AVAILABLE"
    """


    """
    STATE_VM_DEPLOYMENT_QUEUED = "VM_DEPLOYMENT_QUEUED"
    """


    """
    STATE_VM_DEPLOYMENT_IN_PROGRESS = "VM_DEPLOYMENT_IN_PROGRESS"
    """


    """
    STATE_VM_DEPLOYMENT_FAILED = "VM_DEPLOYMENT_FAILED"
    """


    """
    STATE_VM_POWER_ON_IN_PROGRESS = "VM_POWER_ON_IN_PROGRESS"
    """


    """
    STATE_VM_POWER_ON_FAILED = "VM_POWER_ON_FAILED"
    """


    """
    STATE_REGISTRATION_PENDING = "REGISTRATION_PENDING"
    """


    """
    STATE_NODE_NOT_READY = "NODE_NOT_READY"
    """


    """
    STATE_NODE_READY = "NODE_READY"
    """


    """
    STATE_VM_POWER_OFF_IN_PROGRESS = "VM_POWER_OFF_IN_PROGRESS"
    """


    """
    STATE_VM_POWER_OFF_FAILED = "VM_POWER_OFF_FAILED"
    """


    """
    STATE_VM_UNDEPLOY_IN_PROGRESS = "VM_UNDEPLOY_IN_PROGRESS"
    """


    """
    STATE_VM_UNDEPLOY_FAILED = "VM_UNDEPLOY_FAILED"
    """


    """
    STATE_VM_UNDEPLOY_SUCCESSFUL = "VM_UNDEPLOY_SUCCESSFUL"
    """


    """
    STATE_EDGE_CONFIG_ERROR = "EDGE_CONFIG_ERROR"
    """


    """
    STATE_VM_DEPLOYMENT_RESTARTED = "VM_DEPLOYMENT_RESTARTED"
    """


    """
    STATE_REGISTRATION_FAILED = "REGISTRATION_FAILED"
    """


    """
    STATE_TRANSPORT_NODE_SYNC_PENDING = "TRANSPORT_NODE_SYNC_PENDING"
    """


    """
    STATE_TRANSPORT_NODE_CONFIGURATION_MISSING = "TRANSPORT_NODE_CONFIGURATION_MISSING"
    """


    """
    STATE_EDGE_HARDWARE_NOT_SUPPORTED = "EDGE_HARDWARE_NOT_SUPPORTED"
    """


    """
    STATE_MULTIPLE_OVERLAY_TZS_NOT_SUPPORTED = "MULTIPLE_OVERLAY_TZS_NOT_SUPPORTED"
    """


    """
    STATE_TN_OVERLAY_TZ_IN_USE_BY_EDGE_CLUSTER = "TN_OVERLAY_TZ_IN_USE_BY_EDGE_CLUSTER"
    """


    """
    STATE_TZ_ENDPOINTS_NOT_SPECIFIED = "TZ_ENDPOINTS_NOT_SPECIFIED"
    """


    """
    STATE_NO_PNIC_PREPARED_IN_EDGE = "NO_PNIC_PREPARED_IN_EDGE"
    """


    """
    STATE_APPLIANCE_INTERNAL_ERROR = "APPLIANCE_INTERNAL_ERROR"
    """


    """
    STATE_VTEP_DHCP_NOT_SUPPORTED = "VTEP_DHCP_NOT_SUPPORTED"
    """


    """
    STATE_UNSUPPORTED_HOST_SWITCH_PROFILE = "UNSUPPORTED_HOST_SWITCH_PROFILE"
    """


    """
    STATE_UPLINK_HOST_SWITCH_PROFILE_NOT_SPECIFIED = "UPLINK_HOST_SWITCH_PROFILE_NOT_SPECIFIED"
    """


    """
    STATE_HOSTSWITCH_PROFILE_NOT_FOUND = "HOSTSWITCH_PROFILE_NOT_FOUND"
    """


    """
    STATE_LLDP_SEND_ENABLED_NOT_SUPPORTED = "LLDP_SEND_ENABLED_NOT_SUPPORTED"
    """


    """
    STATE_UNSUPPORTED_NAMED_TEAMING_POLICY = "UNSUPPORTED_NAMED_TEAMING_POLICY"
    """


    """
    STATE_LBSRCID_NOT_SUPPORTED_FOR_EDGE_VM = "LBSRCID_NOT_SUPPORTED_FOR_EDGE_VM"
    """


    """
    STATE_LACP_NOT_SUPPORTED_FOR_EDGE_VM = "LACP_NOT_SUPPORTED_FOR_EDGE_VM"
    """


    """
    STATE_STANDBY_UPLINKS_NOT_SUPPORTED_FOR_EDGE_VM = "STANDBY_UPLINKS_NOT_SUPPORTED_FOR_EDGE_VM"
    """


    """
    STATE_MULTIPLE_ACTIVE_UPLINKS_NOT_SUPPORTED_FOR_EDGE = "MULTIPLE_ACTIVE_UPLINKS_NOT_SUPPORTED_FOR_EDGE"
    """


    """
    STATE_UNSUPPORTED_LACP_LB_ALGO_FOR_NODE = "UNSUPPORTED_LACP_LB_ALGO_FOR_NODE"
    """


    """
    STATE_EDGE_NODE_VERSION_NOT_SUPPORTED = "EDGE_NODE_VERSION_NOT_SUPPORTED"
    """


    """
    STATE_NO_PNIC_SPECIFIED_IN_TN = "NO_PNIC_SPECIFIED_IN_TN"
    """


    """
    STATE_INVALID_PNIC_DEVICE_NAME = "INVALID_PNIC_DEVICE_NAME"
    """


    """
    STATE_TRANSPORT_NODE_READY = "TRANSPORT_NODE_READY"
    """


    """
    STATE_VM_NETWORK_EDIT_PENDING = "VM_NETWORK_EDIT_PENDING"
    """


    """
    STATE_UNSUPPORTED_DEFAULT_TEAMING_POLICY = "UNSUPPORTED_DEFAULT_TEAMING_POLICY"
    """


    """
    STATE_MPA_DISCONNECTED = "MPA_DISCONNECTED"
    """


    """
    STATE_VM_RENAME_PENDING = "VM_RENAME_PENDING"
    """


    """
    STATE_VM_CONFIG_EDIT_PENDING = "VM_CONFIG_EDIT_PENDING"
    """


    """
    STATE_VM_NETWORK_EDIT_FAILED = "VM_NETWORK_EDIT_FAILED"
    """


    """
    STATE_VM_RENAME_FAILED = "VM_RENAME_FAILED"
    """


    """
    STATE_VM_CONFIG_EDIT_FAILED = "VM_CONFIG_EDIT_FAILED"
    """


    """
    STATE_VM_CONFIG_DISCREPANCY = "VM_CONFIG_DISCREPANCY"
    """


    """
    STATE_VM_NODE_REFRESH_FAILED = "VM_NODE_REFRESH_FAILED"
    """


    """
    STATE_VM_PLACEMENT_REFRESH_FAILED = "VM_PLACEMENT_REFRESH_FAILED"
    """


    """
    STATE_REGISTRATION_TIMEDOUT = "REGISTRATION_TIMEDOUT"
    """


    """



    _canonical_to_pep_names = {
                            'details': 'details',
                            'failure_code': 'failure_code',
                            'failure_message': 'failure_message',
                            'state': 'state',
                            }

    def __init__(self,
                 details=None,
                 failure_code=None,
                 failure_message=None,
                 state=None,
                ):
        """
        :type  details: :class:`list` of :class:`ConfigurationStateElement` or ``None``
        :param details: Array of configuration state of various sub systems
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  failure_code: :class:`long` or ``None``
        :param failure_code: Error code format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  failure_message: :class:`str` or ``None``
        :param failure_message: Error message in case of failure
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  state: :class:`str` or ``None``
        :param state: Possible values are: 
            
            * :attr:`ConfigurationState.STATE_PENDING`
            * :attr:`ConfigurationState.STATE_IN_PROGRESS`
            * :attr:`ConfigurationState.STATE_SUCCESS`
            * :attr:`ConfigurationState.STATE_FAILED`
            * :attr:`ConfigurationState.STATE_PARTIAL_SUCCESS`
            * :attr:`ConfigurationState.STATE_ORPHANED`
            * :attr:`ConfigurationState.STATE_UNKNOWN`
            * :attr:`ConfigurationState.STATE_ERROR`
            * :attr:`ConfigurationState.STATE_IN_SYNC`
            * :attr:`ConfigurationState.STATE_NOT_AVAILABLE`
            * :attr:`ConfigurationState.STATE_VM_DEPLOYMENT_QUEUED`
            * :attr:`ConfigurationState.STATE_VM_DEPLOYMENT_IN_PROGRESS`
            * :attr:`ConfigurationState.STATE_VM_DEPLOYMENT_FAILED`
            * :attr:`ConfigurationState.STATE_VM_POWER_ON_IN_PROGRESS`
            * :attr:`ConfigurationState.STATE_VM_POWER_ON_FAILED`
            * :attr:`ConfigurationState.STATE_REGISTRATION_PENDING`
            * :attr:`ConfigurationState.STATE_NODE_NOT_READY`
            * :attr:`ConfigurationState.STATE_NODE_READY`
            * :attr:`ConfigurationState.STATE_VM_POWER_OFF_IN_PROGRESS`
            * :attr:`ConfigurationState.STATE_VM_POWER_OFF_FAILED`
            * :attr:`ConfigurationState.STATE_VM_UNDEPLOY_IN_PROGRESS`
            * :attr:`ConfigurationState.STATE_VM_UNDEPLOY_FAILED`
            * :attr:`ConfigurationState.STATE_VM_UNDEPLOY_SUCCESSFUL`
            * :attr:`ConfigurationState.STATE_EDGE_CONFIG_ERROR`
            * :attr:`ConfigurationState.STATE_VM_DEPLOYMENT_RESTARTED`
            * :attr:`ConfigurationState.STATE_REGISTRATION_FAILED`
            * :attr:`ConfigurationState.STATE_TRANSPORT_NODE_SYNC_PENDING`
            *
              :attr:`ConfigurationState.STATE_TRANSPORT_NODE_CONFIGURATION_MISSING`
            * :attr:`ConfigurationState.STATE_EDGE_HARDWARE_NOT_SUPPORTED`
            *
              :attr:`ConfigurationState.STATE_MULTIPLE_OVERLAY_TZS_NOT_SUPPORTED`
            *
              :attr:`ConfigurationState.STATE_TN_OVERLAY_TZ_IN_USE_BY_EDGE_CLUSTER`
            * :attr:`ConfigurationState.STATE_TZ_ENDPOINTS_NOT_SPECIFIED`
            * :attr:`ConfigurationState.STATE_NO_PNIC_PREPARED_IN_EDGE`
            * :attr:`ConfigurationState.STATE_APPLIANCE_INTERNAL_ERROR`
            * :attr:`ConfigurationState.STATE_VTEP_DHCP_NOT_SUPPORTED`
            * :attr:`ConfigurationState.STATE_UNSUPPORTED_HOST_SWITCH_PROFILE`
            *
              :attr:`ConfigurationState.STATE_UPLINK_HOST_SWITCH_PROFILE_NOT_SPECIFIED`
            * :attr:`ConfigurationState.STATE_HOSTSWITCH_PROFILE_NOT_FOUND`
            * :attr:`ConfigurationState.STATE_LLDP_SEND_ENABLED_NOT_SUPPORTED`
            * :attr:`ConfigurationState.STATE_UNSUPPORTED_NAMED_TEAMING_POLICY`
            *
              :attr:`ConfigurationState.STATE_LBSRCID_NOT_SUPPORTED_FOR_EDGE_VM`
            * :attr:`ConfigurationState.STATE_LACP_NOT_SUPPORTED_FOR_EDGE_VM`
            *
              :attr:`ConfigurationState.STATE_STANDBY_UPLINKS_NOT_SUPPORTED_FOR_EDGE_VM`
            *
              :attr:`ConfigurationState.STATE_MULTIPLE_ACTIVE_UPLINKS_NOT_SUPPORTED_FOR_EDGE`
            *
              :attr:`ConfigurationState.STATE_UNSUPPORTED_LACP_LB_ALGO_FOR_NODE`
            * :attr:`ConfigurationState.STATE_EDGE_NODE_VERSION_NOT_SUPPORTED`
            * :attr:`ConfigurationState.STATE_NO_PNIC_SPECIFIED_IN_TN`
            * :attr:`ConfigurationState.STATE_INVALID_PNIC_DEVICE_NAME`
            * :attr:`ConfigurationState.STATE_TRANSPORT_NODE_READY`
            * :attr:`ConfigurationState.STATE_VM_NETWORK_EDIT_PENDING`
            *
              :attr:`ConfigurationState.STATE_UNSUPPORTED_DEFAULT_TEAMING_POLICY`
            * :attr:`ConfigurationState.STATE_MPA_DISCONNECTED`
            * :attr:`ConfigurationState.STATE_VM_RENAME_PENDING`
            * :attr:`ConfigurationState.STATE_VM_CONFIG_EDIT_PENDING`
            * :attr:`ConfigurationState.STATE_VM_NETWORK_EDIT_FAILED`
            * :attr:`ConfigurationState.STATE_VM_RENAME_FAILED`
            * :attr:`ConfigurationState.STATE_VM_CONFIG_EDIT_FAILED`
            * :attr:`ConfigurationState.STATE_VM_CONFIG_DISCREPANCY`
            * :attr:`ConfigurationState.STATE_VM_NODE_REFRESH_FAILED`
            * :attr:`ConfigurationState.STATE_VM_PLACEMENT_REFRESH_FAILED`
            * :attr:`ConfigurationState.STATE_REGISTRATION_TIMEDOUT`
            
            Gives details of state of desired configuration. Additional enums
            with more details on progress/success/error states are sent for
            edge node. The success states are NODE_READY and
            TRANSPORT_NODE_READY, pending states are {VM_DEPLOYMENT_QUEUED,
            VM_DEPLOYMENT_IN_PROGRESS, REGISTRATION_PENDING} and other values
            indicate failures. \"in_sync\" state indicates that the desired
            configuration has been received by the host to which it applies,
            but is not yet in effect. When the configuration is actually in
            effect, the state will change to \"success\". Please note, failed
            state is deprecated.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.details = details
        self.failure_code = failure_code
        self.failure_message = failure_message
        self.state = state
        VapiStruct.__init__(self)


ConfigurationState._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.configuration_state', {
        'details': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ConfigurationStateElement'))),
        'failure_code': type.OptionalType(type.IntegerType()),
        'failure_message': type.OptionalType(type.StringType()),
        'state': type.OptionalType(type.StringType()),
    },
    ConfigurationState,
    False,
    None))



class ConfigurationStateElement(VapiStruct):
    """
    Describes status of configuration of an entity

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    STATE_IN_PROGRESS = "in_progress"
    """


    """
    STATE_SUCCESS = "success"
    """


    """
    STATE_FAILED = "failed"
    """


    """
    STATE_PARTIAL_SUCCESS = "partial_success"
    """


    """
    STATE_IN_SYNC = "in_sync"
    """


    """
    STATE_VM_DEPLOYMENT_FAILED = "VM_DEPLOYMENT_FAILED"
    """


    """
    STATE_VM_POWER_ON_FAILED = "VM_POWER_ON_FAILED"
    """


    """
    STATE_VM_POWER_OFF_FAILED = "VM_POWER_OFF_FAILED"
    """


    """
    STATE_VM_UNDEPLOY_FAILED = "VM_UNDEPLOY_FAILED"
    """


    """
    STATE_EDGE_CONFIG_ERROR = "EDGE_CONFIG_ERROR"
    """


    """
    STATE_REGISTRATION_FAILED = "REGISTRATION_FAILED"
    """


    """
    STATE_TRANSPORT_NODE_CONFIGURATION_MISSING = "TRANSPORT_NODE_CONFIGURATION_MISSING"
    """


    """
    STATE_EDGE_HARDWARE_NOT_SUPPORTED = "EDGE_HARDWARE_NOT_SUPPORTED"
    """


    """
    STATE_MULTIPLE_OVERLAY_TZS_NOT_SUPPORTED = "MULTIPLE_OVERLAY_TZS_NOT_SUPPORTED"
    """


    """
    STATE_TN_OVERLAY_TZ_IN_USE_BY_EDGE_CLUSTER = "TN_OVERLAY_TZ_IN_USE_BY_EDGE_CLUSTER"
    """


    """
    STATE_TZ_ENDPOINTS_NOT_SPECIFIED = "TZ_ENDPOINTS_NOT_SPECIFIED"
    """


    """
    STATE_NO_PNIC_PREPARED_IN_EDGE = "NO_PNIC_PREPARED_IN_EDGE"
    """


    """
    STATE_APPLIANCE_INTERNAL_ERROR = "APPLIANCE_INTERNAL_ERROR"
    """


    """
    STATE_VTEP_DHCP_NOT_SUPPORTED = "VTEP_DHCP_NOT_SUPPORTED"
    """


    """
    STATE_UNSUPPORTED_HOST_SWITCH_PROFILE = "UNSUPPORTED_HOST_SWITCH_PROFILE"
    """


    """
    STATE_UPLINK_HOST_SWITCH_PROFILE_NOT_SPECIFIED = "UPLINK_HOST_SWITCH_PROFILE_NOT_SPECIFIED"
    """


    """
    STATE_HOSTSWITCH_PROFILE_NOT_FOUND = "HOSTSWITCH_PROFILE_NOT_FOUND"
    """


    """
    STATE_LLDP_SEND_ENABLED_NOT_SUPPORTED = "LLDP_SEND_ENABLED_NOT_SUPPORTED"
    """


    """
    STATE_UNSUPPORTED_NAMED_TEAMING_POLICY = "UNSUPPORTED_NAMED_TEAMING_POLICY"
    """


    """
    STATE_LBSRCID_NOT_SUPPORTED_FOR_EDGE_VM = "LBSRCID_NOT_SUPPORTED_FOR_EDGE_VM"
    """


    """
    STATE_LACP_NOT_SUPPORTED_FOR_EDGE_VM = "LACP_NOT_SUPPORTED_FOR_EDGE_VM"
    """


    """
    STATE_STANDBY_UPLINKS_NOT_SUPPORTED_FOR_EDGE_VM = "STANDBY_UPLINKS_NOT_SUPPORTED_FOR_EDGE_VM"
    """


    """
    STATE_MULTIPLE_ACTIVE_UPLINKS_NOT_SUPPORTED_FOR_EDGE = "MULTIPLE_ACTIVE_UPLINKS_NOT_SUPPORTED_FOR_EDGE"
    """


    """
    STATE_UNSUPPORTED_LACP_LB_ALGO_FOR_NODE = "UNSUPPORTED_LACP_LB_ALGO_FOR_NODE"
    """


    """
    STATE_EDGE_NODE_VERSION_NOT_SUPPORTED = "EDGE_NODE_VERSION_NOT_SUPPORTED"
    """


    """
    STATE_NO_PNIC_SPECIFIED_IN_TN = "NO_PNIC_SPECIFIED_IN_TN"
    """


    """
    STATE_INVALID_PNIC_DEVICE_NAME = "INVALID_PNIC_DEVICE_NAME"
    """


    """
    STATE_UNSUPPORTED_DEFAULT_TEAMING_POLICY = "UNSUPPORTED_DEFAULT_TEAMING_POLICY"
    """


    """
    STATE_MPA_DISCONNECTED = "MPA_DISCONNECTED"
    """


    """
    STATE_VM_NETWORK_EDIT_PENDING = "VM_NETWORK_EDIT_PENDING"
    """


    """
    STATE_VM_RENAME_PENDING = "VM_RENAME_PENDING"
    """


    """
    STATE_VM_CONFIG_EDIT_PENDING = "VM_CONFIG_EDIT_PENDING"
    """


    """
    STATE_VM_NETWORK_EDIT_FAILED = "VM_NETWORK_EDIT_FAILED"
    """


    """
    STATE_VM_RENAME_FAILED = "VM_RENAME_FAILED"
    """


    """
    STATE_VM_CONFIG_EDIT_FAILED = "VM_CONFIG_EDIT_FAILED"
    """


    """
    STATE_VM_CONFIG_DISCREPANCY = "VM_CONFIG_DISCREPANCY"
    """


    """
    STATE_VM_NODE_REFRESH_FAILED = "VM_NODE_REFRESH_FAILED"
    """


    """
    STATE_VM_PLACEMENT_REFRESH_FAILED = "VM_PLACEMENT_REFRESH_FAILED"
    """


    """
    STATE_NOT_AVAILABLE = "NOT_AVAILABLE"
    """


    """
    STATE_REGISTRATION_TIMEDOUT = "REGISTRATION_TIMEDOUT"
    """


    """
    STATE_PENDING = "pending"
    """


    """
    STATE_ORPHANED = "orphaned"
    """


    """
    STATE_UNKNOWN = "unknown"
    """


    """
    STATE_ERROR = "error"
    """


    """



    _canonical_to_pep_names = {
                            'failure_code': 'failure_code',
                            'failure_message': 'failure_message',
                            'state': 'state',
                            'sub_system_address': 'sub_system_address',
                            'sub_system_id': 'sub_system_id',
                            'sub_system_name': 'sub_system_name',
                            'sub_system_type': 'sub_system_type',
                            }

    def __init__(self,
                 failure_code=None,
                 failure_message=None,
                 state=None,
                 sub_system_address=None,
                 sub_system_id=None,
                 sub_system_name=None,
                 sub_system_type=None,
                ):
        """
        :type  failure_code: :class:`long` or ``None``
        :param failure_code: Error code format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  failure_message: :class:`str` or ``None``
        :param failure_message: Error message in case of failure
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  state: :class:`str` or ``None``
        :param state: Possible values are: 
            
            * :attr:`ConfigurationStateElement.STATE_IN_PROGRESS`
            * :attr:`ConfigurationStateElement.STATE_SUCCESS`
            * :attr:`ConfigurationStateElement.STATE_FAILED`
            * :attr:`ConfigurationStateElement.STATE_PARTIAL_SUCCESS`
            * :attr:`ConfigurationStateElement.STATE_IN_SYNC`
            * :attr:`ConfigurationStateElement.STATE_VM_DEPLOYMENT_FAILED`
            * :attr:`ConfigurationStateElement.STATE_VM_POWER_ON_FAILED`
            * :attr:`ConfigurationStateElement.STATE_VM_POWER_OFF_FAILED`
            * :attr:`ConfigurationStateElement.STATE_VM_UNDEPLOY_FAILED`
            * :attr:`ConfigurationStateElement.STATE_EDGE_CONFIG_ERROR`
            * :attr:`ConfigurationStateElement.STATE_REGISTRATION_FAILED`
            *
              :attr:`ConfigurationStateElement.STATE_TRANSPORT_NODE_CONFIGURATION_MISSING`
            *
              :attr:`ConfigurationStateElement.STATE_EDGE_HARDWARE_NOT_SUPPORTED`
            *
              :attr:`ConfigurationStateElement.STATE_MULTIPLE_OVERLAY_TZS_NOT_SUPPORTED`
            *
              :attr:`ConfigurationStateElement.STATE_TN_OVERLAY_TZ_IN_USE_BY_EDGE_CLUSTER`
            *
              :attr:`ConfigurationStateElement.STATE_TZ_ENDPOINTS_NOT_SPECIFIED`
            * :attr:`ConfigurationStateElement.STATE_NO_PNIC_PREPARED_IN_EDGE`
            * :attr:`ConfigurationStateElement.STATE_APPLIANCE_INTERNAL_ERROR`
            * :attr:`ConfigurationStateElement.STATE_VTEP_DHCP_NOT_SUPPORTED`
            *
              :attr:`ConfigurationStateElement.STATE_UNSUPPORTED_HOST_SWITCH_PROFILE`
            *
              :attr:`ConfigurationStateElement.STATE_UPLINK_HOST_SWITCH_PROFILE_NOT_SPECIFIED`
            *
              :attr:`ConfigurationStateElement.STATE_HOSTSWITCH_PROFILE_NOT_FOUND`
            *
              :attr:`ConfigurationStateElement.STATE_LLDP_SEND_ENABLED_NOT_SUPPORTED`
            *
              :attr:`ConfigurationStateElement.STATE_UNSUPPORTED_NAMED_TEAMING_POLICY`
            *
              :attr:`ConfigurationStateElement.STATE_LBSRCID_NOT_SUPPORTED_FOR_EDGE_VM`
            *
              :attr:`ConfigurationStateElement.STATE_LACP_NOT_SUPPORTED_FOR_EDGE_VM`
            *
              :attr:`ConfigurationStateElement.STATE_STANDBY_UPLINKS_NOT_SUPPORTED_FOR_EDGE_VM`
            *
              :attr:`ConfigurationStateElement.STATE_MULTIPLE_ACTIVE_UPLINKS_NOT_SUPPORTED_FOR_EDGE`
            *
              :attr:`ConfigurationStateElement.STATE_UNSUPPORTED_LACP_LB_ALGO_FOR_NODE`
            *
              :attr:`ConfigurationStateElement.STATE_EDGE_NODE_VERSION_NOT_SUPPORTED`
            * :attr:`ConfigurationStateElement.STATE_NO_PNIC_SPECIFIED_IN_TN`
            * :attr:`ConfigurationStateElement.STATE_INVALID_PNIC_DEVICE_NAME`
            *
              :attr:`ConfigurationStateElement.STATE_UNSUPPORTED_DEFAULT_TEAMING_POLICY`
            * :attr:`ConfigurationStateElement.STATE_MPA_DISCONNECTED`
            * :attr:`ConfigurationStateElement.STATE_VM_NETWORK_EDIT_PENDING`
            * :attr:`ConfigurationStateElement.STATE_VM_RENAME_PENDING`
            * :attr:`ConfigurationStateElement.STATE_VM_CONFIG_EDIT_PENDING`
            * :attr:`ConfigurationStateElement.STATE_VM_NETWORK_EDIT_FAILED`
            * :attr:`ConfigurationStateElement.STATE_VM_RENAME_FAILED`
            * :attr:`ConfigurationStateElement.STATE_VM_CONFIG_EDIT_FAILED`
            * :attr:`ConfigurationStateElement.STATE_VM_CONFIG_DISCREPANCY`
            * :attr:`ConfigurationStateElement.STATE_VM_NODE_REFRESH_FAILED`
            *
              :attr:`ConfigurationStateElement.STATE_VM_PLACEMENT_REFRESH_FAILED`
            * :attr:`ConfigurationStateElement.STATE_NOT_AVAILABLE`
            * :attr:`ConfigurationStateElement.STATE_REGISTRATION_TIMEDOUT`
            * :attr:`ConfigurationStateElement.STATE_PENDING`
            * :attr:`ConfigurationStateElement.STATE_ORPHANED`
            * :attr:`ConfigurationStateElement.STATE_UNKNOWN`
            * :attr:`ConfigurationStateElement.STATE_ERROR`
            
             State of configuration on this sub system
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sub_system_address: :class:`str` or ``None``
        :param sub_system_address: URI of backing resource on sub system
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sub_system_id: :class:`str` or ``None``
        :param sub_system_id: Identifier of backing resource on sub system
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sub_system_name: :class:`str` or ``None``
        :param sub_system_name: Name of backing resource on sub system
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sub_system_type: :class:`str` or ``None``
        :param sub_system_type: Type of backing resource on sub system
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.failure_code = failure_code
        self.failure_message = failure_message
        self.state = state
        self.sub_system_address = sub_system_address
        self.sub_system_id = sub_system_id
        self.sub_system_name = sub_system_name
        self.sub_system_type = sub_system_type
        VapiStruct.__init__(self)


ConfigurationStateElement._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.configuration_state_element', {
        'failure_code': type.OptionalType(type.IntegerType()),
        'failure_message': type.OptionalType(type.StringType()),
        'state': type.OptionalType(type.StringType()),
        'sub_system_address': type.OptionalType(type.StringType()),
        'sub_system_id': type.OptionalType(type.StringType()),
        'sub_system_name': type.OptionalType(type.StringType()),
        'sub_system_type': type.OptionalType(type.StringType()),
    },
    ConfigurationStateElement,
    False,
    None))



class ConjunctionOperator(VapiStruct):
    """
    Represents the operators AND or OR.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ConjunctionOperator"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    CONJUNCTION_OPERATOR_OR = "OR"
    """


    """
    CONJUNCTION_OPERATOR_AND = "AND"
    """


    """



    _canonical_to_pep_names = {
                            'conjunction_operator': 'conjunction_operator',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            }

    def __init__(self,
                 conjunction_operator=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ConjunctionOperator',
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                ):
        """
        :type  conjunction_operator: :class:`str` or ``None``
        :param conjunction_operator: Possible values are: 
            
            * :attr:`ConjunctionOperator.CONJUNCTION_OPERATOR_OR`
            * :attr:`ConjunctionOperator.CONJUNCTION_OPERATOR_AND`
            
             Conjunction Operator Node
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`Expression.RESOURCE_TYPE_CONDITION`
            * :attr:`Expression.RESOURCE_TYPE_CONJUNCTIONOPERATOR`
            * :attr:`Expression.RESOURCE_TYPE_NESTEDEXPRESSION`
            * :attr:`Expression.RESOURCE_TYPE_IPADDRESSEXPRESSION`
            * :attr:`Expression.RESOURCE_TYPE_MACADDRESSEXPRESSION`
            * :attr:`Expression.RESOURCE_TYPE_EXTERNALIDEXPRESSION`
            * :attr:`Expression.RESOURCE_TYPE_PATHEXPRESSION`
            * :attr:`Expression.RESOURCE_TYPE_IDENTITYGROUPEXPRESSION`
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.conjunction_operator = conjunction_operator
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ConjunctionOperator._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.conjunction_operator', {
        'conjunction_operator': type.OptionalType(type.StringType()),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
    },
    ConjunctionOperator,
    False,
    None))



class ConnectivityAdvancedConfig(VapiStruct):
    """
    Advanced configuration for Policy connectivity

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    CONNECTIVITY_ON = "ON"
    """


    """
    CONNECTIVITY_OFF = "OFF"
    """


    """



    _canonical_to_pep_names = {
                            'connectivity': 'connectivity',
                            }

    def __init__(self,
                 connectivity=None,
                ):
        """
        :type  connectivity: :class:`str` or ``None``
        :param connectivity: Possible values are: 
            
            * :attr:`ConnectivityAdvancedConfig.CONNECTIVITY_ON`
            * :attr:`ConnectivityAdvancedConfig.CONNECTIVITY_OFF`
            
            Connectivity configuration to manually connect (ON) or disconnect
            (OFF) a Tier1 segment from corresponding Tier1 gateway. Only valid
            for Tier1 Segments. This property is ignored for L2 VPN extended
            segments when subnets property is not specified.
        """
        self.connectivity = connectivity
        VapiStruct.__init__(self)


ConnectivityAdvancedConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.connectivity_advanced_config', {
        'connectivity': type.OptionalType(type.StringType()),
    },
    ConnectivityAdvancedConfig,
    False,
    None))



class ConsolidatedEffectiveIPAddressMemberListResult(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`EffectiveIPInfo` or ``None``
        :param results: Paged Collection of site wise consolidated effective ip addresses
            for the given NSGroup
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


ConsolidatedEffectiveIPAddressMemberListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.consolidated_effective_IP_address_member_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'EffectiveIPInfo'))),
    },
    ConsolidatedEffectiveIPAddressMemberListResult,
    False,
    None))



class ConsolidatedRealizedStatus(VapiStruct):
    """
    Consolidated Realized Status of an intent object across enforcement points.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    PUBLISH_STATUS_UNAVAILABLE = "UNAVAILABLE"
    """


    """
    PUBLISH_STATUS_UNREALIZED = "UNREALIZED"
    """


    """
    PUBLISH_STATUS_REALIZED = "REALIZED"
    """


    """
    PUBLISH_STATUS_ERROR = "ERROR"
    """


    """



    _canonical_to_pep_names = {
                            'intent_path': 'intent_path',
                            'consolidated_status': 'consolidated_status',
                            'consolidated_status_per_enforcement_point': 'consolidated_status_per_enforcement_point',
                            'intent_version': 'intent_version',
                            'publish_status': 'publish_status',
                            }

    def __init__(self,
                 intent_path=None,
                 consolidated_status=None,
                 consolidated_status_per_enforcement_point=None,
                 intent_version=None,
                 publish_status=None,
                ):
        """
        :type  intent_path: :class:`str` or ``None``
        :param intent_path: Intent path of object, forward slashes must be escaped using %2F.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  consolidated_status: :class:`ConsolidatedStatus` or ``None``
        :param consolidated_status: Consolidated Realized Status across enforcement points.
        :type  consolidated_status_per_enforcement_point: :class:`list` of :class:`ConsolidatedStatusPerEnforcementPoint` or ``None``
        :param consolidated_status_per_enforcement_point: List of Consolidated Realized Status per enforcement point.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  intent_version: :class:`str` or ``None``
        :param intent_version: Represent highest intent version across all realized objects
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  publish_status: :class:`str` or ``None``
        :param publish_status: Possible values are: 
            
            * :attr:`ConsolidatedRealizedStatus.PUBLISH_STATUS_UNAVAILABLE`
            * :attr:`ConsolidatedRealizedStatus.PUBLISH_STATUS_UNREALIZED`
            * :attr:`ConsolidatedRealizedStatus.PUBLISH_STATUS_REALIZED`
            * :attr:`ConsolidatedRealizedStatus.PUBLISH_STATUS_ERROR`
            
             Aggregated Realization state of this object
        """
        self.intent_path = intent_path
        self.consolidated_status = consolidated_status
        self.consolidated_status_per_enforcement_point = consolidated_status_per_enforcement_point
        self.intent_version = intent_version
        self.publish_status = publish_status
        VapiStruct.__init__(self)


ConsolidatedRealizedStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.consolidated_realized_status', {
        'intent_path': type.OptionalType(type.StringType()),
        'consolidated_status': type.OptionalType(type.ReferenceType(__name__, 'ConsolidatedStatus')),
        'consolidated_status_per_enforcement_point': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ConsolidatedStatusPerEnforcementPoint'))),
        'intent_version': type.OptionalType(type.StringType()),
        'publish_status': type.OptionalType(type.StringType()),
    },
    ConsolidatedRealizedStatus,
    False,
    None))



class ConsolidatedStatus(VapiStruct):
    """
    Consolidated Status of an intent object. Status Consolidation of an intent
    happens at multiple levels: - Per Enforcement Point: calculation of the
    consolidated status is performed using all realized entities that the
    intent objet maps to on a specific enforcement point. - Across Enforcement
    Points: calculation of the consolidated status is performend aggregating
    the consolidated status from each enforcement point.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    CONSOLIDATED_STATUS_SUCCESS = "SUCCESS"
    """


    """
    CONSOLIDATED_STATUS_IN_PROGRESS = "IN_PROGRESS"
    """


    """
    CONSOLIDATED_STATUS_ERROR = "ERROR"
    """


    """
    CONSOLIDATED_STATUS_UNKNOWN = "UNKNOWN"
    """


    """
    CONSOLIDATED_STATUS_UNINITIALIZED = "UNINITIALIZED"
    """


    """



    _canonical_to_pep_names = {
                            'consolidated_status': 'consolidated_status',
                            }

    def __init__(self,
                 consolidated_status=None,
                ):
        """
        :type  consolidated_status: :class:`str` or ``None``
        :param consolidated_status: Possible values are: 
            
            * :attr:`ConsolidatedStatus.CONSOLIDATED_STATUS_SUCCESS`
            * :attr:`ConsolidatedStatus.CONSOLIDATED_STATUS_IN_PROGRESS`
            * :attr:`ConsolidatedStatus.CONSOLIDATED_STATUS_ERROR`
            * :attr:`ConsolidatedStatus.CONSOLIDATED_STATUS_UNKNOWN`
            * :attr:`ConsolidatedStatus.CONSOLIDATED_STATUS_UNINITIALIZED`
            
             Consolidated Realized Status of an intent object.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.consolidated_status = consolidated_status
        VapiStruct.__init__(self)


ConsolidatedStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.consolidated_status', {
        'consolidated_status': type.OptionalType(type.StringType()),
    },
    ConsolidatedStatus,
    False,
    None))



class ConsolidatedStatusNsxt(VapiStruct):
    """
    Detailed Realized Status of an intent object on an NSX-T type of
    enforcement point.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'enforced_status': 'enforced_status',
                            'alarm': 'alarm',
                            'enforcement_point_path': 'enforcement_point_path',
                            'consolidated_status': 'consolidated_status',
                            'enforcement_point_id': 'enforcement_point_id',
                            'resource_type': 'resource_type',
                            'site_path': 'site_path',
                            }

    def __init__(self,
                 enforced_status=None,
                 alarm=None,
                 enforcement_point_path=None,
                 consolidated_status=None,
                 enforcement_point_id=None,
                 resource_type=None,
                 site_path=None,
                ):
        """
        :type  enforced_status: :class:`EnforcedStatusDetailsNsxt` or ``None``
        :param enforced_status: Detailed Realized Status inherent to an NSX-T Enforcement Point.
        :type  alarm: :class:`PolicyRuntimeAlarm` or ``None``
        :param alarm: Alarm information details.
        :type  enforcement_point_path: :class:`str` or ``None``
        :param enforcement_point_path: Policy Path referencing the enforcement point where the info is
            fetched.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  consolidated_status: :class:`ConsolidatedStatus` or ``None``
        :param consolidated_status: Consolidated Realized Status of an Intent object per enforcement
            point.
        :type  enforcement_point_id: :class:`str` or ``None``
        :param enforcement_point_id: Enforcement Point Id.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  site_path: :class:`str` or ``None``
        :param site_path: The site where this enforcement point resides.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.enforced_status = enforced_status
        self.alarm = alarm
        self.enforcement_point_path = enforcement_point_path
        self.consolidated_status = consolidated_status
        self.enforcement_point_id = enforcement_point_id
        self._resource_type = resource_type
        self.site_path = site_path
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ConsolidatedStatusNsxt._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.consolidated_status_nsxt', {
        'enforced_status': type.OptionalType(type.ReferenceType(__name__, 'EnforcedStatusDetailsNsxt')),
        'alarm': type.OptionalType(type.ReferenceType(__name__, 'PolicyRuntimeAlarm')),
        'enforcement_point_path': type.OptionalType(type.StringType()),
        'consolidated_status': type.OptionalType(type.ReferenceType(__name__, 'ConsolidatedStatus')),
        'enforcement_point_id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'site_path': type.OptionalType(type.StringType()),
    },
    ConsolidatedStatusNsxt,
    False,
    None))



class ConsolidatedStatusPerEnforcementPoint(VapiStruct):
    """
    Consolidated Realized Status Per Enforcement Point.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ConsolidatedStatusPerEnforcementPoint"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'alarm': 'alarm',
                            'enforcement_point_path': 'enforcement_point_path',
                            'consolidated_status': 'consolidated_status',
                            'enforcement_point_id': 'enforcement_point_id',
                            'resource_type': 'resource_type',
                            'site_path': 'site_path',
                            }

    def __init__(self,
                 alarm=None,
                 enforcement_point_path=None,
                 consolidated_status=None,
                 enforcement_point_id=None,
                 resource_type='ConsolidatedStatusPerEnforcementPoint',
                 site_path=None,
                ):
        """
        :type  alarm: :class:`PolicyRuntimeAlarm` or ``None``
        :param alarm: Alarm information details.
        :type  enforcement_point_path: :class:`str` or ``None``
        :param enforcement_point_path: Policy Path referencing the enforcement point where the info is
            fetched.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  consolidated_status: :class:`ConsolidatedStatus` or ``None``
        :param consolidated_status: Consolidated Realized Status of an Intent object per enforcement
            point.
        :type  enforcement_point_id: :class:`str` or ``None``
        :param enforcement_point_id: Enforcement Point Id.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  resource_type: :class:`str`
        :param resource_type: 
        :type  site_path: :class:`str` or ``None``
        :param site_path: The site where this enforcement point resides.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.alarm = alarm
        self.enforcement_point_path = enforcement_point_path
        self.consolidated_status = consolidated_status
        self.enforcement_point_id = enforcement_point_id
        self._resource_type = resource_type
        self.site_path = site_path
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ConsolidatedStatusPerEnforcementPoint._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.consolidated_status_per_enforcement_point', {
        'alarm': type.OptionalType(type.ReferenceType(__name__, 'PolicyRuntimeAlarm')),
        'enforcement_point_path': type.OptionalType(type.StringType()),
        'consolidated_status': type.OptionalType(type.ReferenceType(__name__, 'ConsolidatedStatus')),
        'enforcement_point_id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'site_path': type.OptionalType(type.StringType()),
    },
    ConsolidatedStatusPerEnforcementPoint,
    False,
    None))



class ConstantFieldValue(VapiStruct):
    """
    Constant Field Value.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ConstantFieldValue"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'constant': 'constant',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 constant=None,
                 resource_type='ConstantFieldValue',
                ):
        """
        :type  constant: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param constant: Constant Value that the field must be set to.
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`FieldSettingValue.RESOURCE_TYPE_CONSTANTFIELDVALUE`
            
             Field Setting Value resource type.
        """
        self.constant = constant
        self._resource_type = resource_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ConstantFieldValue._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.constant_field_value', {
        'constant': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct)),
        'resource_type': type.StringType(),
    },
    ConstantFieldValue,
    False,
    None))



class Constraint(VapiStruct):
    """
    Constraint object to constraint any attribute on a resource based on
    specified expression. Example- Restrict the allowed services in Edge
    Communication Entry to list of services, if the destinationGroups contain
    vCenter. { \"target\":{ \"target_resource_type\":\"CommunicationEntry\",
    \"attribute\":\"services\",
    \"path_prefix\":\"/infra/domains/vmc-domain/edge-communication-maps/default/communication-entries\"
    } \"constraint_expression\":{ \"related_attribute\":{
    \"attribute\":\"destinationGroups\" } \"condition\":{
    \"operator\":\"INCLUDES\", \"rhs_value\":{\"vCenter\"}
    \"value_constraint\":{ \"operator\":\"ALLOW\",
    \"values\":{\"/ref/services/HTTPS\", \"/ref/services/HTTOP\", ...} } } } }

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'constraint_expression': 'constraint_expression',
                            'message': 'message',
                            'target': 'target',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 constraint_expression=None,
                 message=None,
                 target=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  constraint_expression: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param constraint_expression: Expression to constrain the target attribute value.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ConstraintExpression`. When methods return a value of this
            class as a return value, the attribute will contain all the
            attributes defined in :class:`ConstraintExpression`.
        :type  message: :class:`str` or ``None``
        :param message: User friendly message to be shown to users upon violation.
        :type  target: :class:`ConstraintTarget` or ``None``
        :param target: Target resource attribute details.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.constraint_expression = constraint_expression
        self.message = message
        self.target = target
        VapiStruct.__init__(self)


Constraint._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.constraint', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'constraint_expression': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ConstraintExpression')])),
        'message': type.OptionalType(type.StringType()),
        'target': type.OptionalType(type.ReferenceType(__name__, 'ConstraintTarget')),
    },
    Constraint,
    False,
    None))



class ConstraintExpression(VapiStruct):
    """
    All the types of the expression extend from this abstract class. This is
    present for extensibility.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ConstraintExpression"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    RESOURCE_TYPE_VALUECONSTRAINTEXPRESSION = "ValueConstraintExpression"
    """


    """
    RESOURCE_TYPE_RELATEDATTRIBUTECONDITIONALEXPRESSION = "RelatedAttributeConditionalExpression"
    """


    """
    RESOURCE_TYPE_ENTITYINSTANCECOUNTCONSTRAINTEXPRESSION = "EntityInstanceCountConstraintExpression"
    """


    """
    RESOURCE_TYPE_FIELDSANITYCONSTRAINTEXPRESSION = "FieldSanityConstraintExpression"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ConstraintExpression',
                 tags=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`ConstraintExpression.RESOURCE_TYPE_VALUECONSTRAINTEXPRESSION`
            *
              :attr:`ConstraintExpression.RESOURCE_TYPE_RELATEDATTRIBUTECONDITIONALEXPRESSION`
            *
              :attr:`ConstraintExpression.RESOURCE_TYPE_ENTITYINSTANCECOUNTCONSTRAINTEXPRESSION`
            *
              :attr:`ConstraintExpression.RESOURCE_TYPE_FIELDSANITYCONSTRAINTEXPRESSION`
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ConstraintExpression._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.constraint_expression', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
    },
    ConstraintExpression,
    False,
    None))



class ConstraintListResult(VapiStruct):
    """
    Paged Collection of Constraints

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`Constraint` or ``None``
        :param results: Constraint list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


ConstraintListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.constraint_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Constraint'))),
    },
    ConstraintListResult,
    False,
    None))



class ConstraintTarget(VapiStruct):
    """
    Resource attribute on which constraint should be applied. Example -
    sourceGroups attribute of Edge CommunicationEntry to be restricted, is
    given as: { \"target_resource_type\":\"CommunicationEntry\",
    \"attribute\":\"sourceGroups\",
    \"path_prefix\":\"/infra/domains/vmc-domain/edge-communication-maps/default/communication-entries\"
    }

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'attribute': 'attribute',
                            'path_prefix': 'path_prefix',
                            'target_resource_type': 'target_resource_type',
                            }

    def __init__(self,
                 attribute=None,
                 path_prefix=None,
                 target_resource_type=None,
                ):
        """
        :type  attribute: :class:`str` or ``None``
        :param attribute: Attribute name of the target entity.
        :type  path_prefix: :class:`str` or ``None``
        :param path_prefix: Path prefix of the entity to apply constraint. This is required to
            further disambiguiate if multiple policy entities share the same
            resource type. Example - Edge FW and DFW use the same resource type
            CommunicationMap, CommunicationEntry, Group, etc.
        :type  target_resource_type: :class:`str` or ``None``
        :param target_resource_type: Resource type of the target entity.
        """
        self.attribute = attribute
        self.path_prefix = path_prefix
        self.target_resource_type = target_resource_type
        VapiStruct.__init__(self)


ConstraintTarget._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.constraint_target', {
        'attribute': type.OptionalType(type.StringType()),
        'path_prefix': type.OptionalType(type.StringType()),
        'target_resource_type': type.OptionalType(type.StringType()),
    },
    ConstraintTarget,
    False,
    None))



class ContainerApplication(VapiStruct):
    """
    Container application within a project.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ContainerApplication"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    NETWORK_STATUS_HEALTHY = "HEALTHY"
    """


    """
    NETWORK_STATUS_UNHEALTHY = "UNHEALTHY"
    """


    """
    STATUS_UNKNOWN = "UNKNOWN"
    """


    """
    STATUS_HEALTHY = "HEALTHY"
    """


    """
    STATUS_UP = "UP"
    """


    """
    STATUS_DOWN = "DOWN"
    """


    """
    STATUS_DEGRADED = "DEGRADED"
    """


    """



    _canonical_to_pep_names = {
                            'container_cluster_id': 'container_cluster_id',
                            'container_project_id': 'container_project_id',
                            'external_id': 'external_id',
                            'network_errors': 'network_errors',
                            'network_status': 'network_status',
                            'origin_properties': 'origin_properties',
                            'status': 'status',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_last_sync_time': 'last_sync_time',
                            'description': 'description',
                            'display_name': 'display_name',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            }

    def __init__(self,
                 container_cluster_id=None,
                 container_project_id=None,
                 external_id=None,
                 network_errors=None,
                 network_status=None,
                 origin_properties=None,
                 status=None,
                 links=None,
                 schema=None,
                 self_=None,
                 last_sync_time=None,
                 description=None,
                 display_name=None,
                 resource_type='ContainerApplication',
                 tags=None,
                ):
        """
        :type  container_cluster_id: :class:`str` or ``None``
        :param container_cluster_id: Identifier of the container cluster this container application
            belongs to.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  container_project_id: :class:`str` or ``None``
        :param container_project_id: Identifier of the project which this container application belongs
            to.
        :type  external_id: :class:`str` or ``None``
        :param external_id: Identifier of the container application on container cluster e.g.
            PCF app id, k8s service id.
        :type  network_errors: :class:`list` of :class:`NetworkError` or ``None``
        :param network_errors: List of network errors related to container application.
        :type  network_status: :class:`str` or ``None``
        :param network_status: Possible values are: 
            
            * :attr:`ContainerApplication.NETWORK_STATUS_HEALTHY`
            * :attr:`ContainerApplication.NETWORK_STATUS_UNHEALTHY`
            
             Network status of container application.
        :type  origin_properties: :class:`list` of :class:`KeyValuePair` or ``None``
        :param origin_properties: Array of additional specific properties of container application in
            key-value format.
        :type  status: :class:`str` or ``None``
        :param status: Possible values are: 
            
            * :attr:`ContainerApplication.STATUS_UNKNOWN`
            * :attr:`ContainerApplication.STATUS_HEALTHY`
            * :attr:`ContainerApplication.STATUS_UP`
            * :attr:`ContainerApplication.STATUS_DOWN`
            * :attr:`ContainerApplication.STATUS_DEGRADED`
            
             Status of the container application.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  last_sync_time: :class:`long` or ``None``
        :param last_sync_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  resource_type: :class:`str`
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        """
        self.container_cluster_id = container_cluster_id
        self.container_project_id = container_project_id
        self.external_id = external_id
        self.network_errors = network_errors
        self.network_status = network_status
        self.origin_properties = origin_properties
        self.status = status
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.last_sync_time = last_sync_time
        self.description = description
        self.display_name = display_name
        self._resource_type = resource_type
        self.tags = tags
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ContainerApplication._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.container_application', {
        'container_cluster_id': type.OptionalType(type.StringType()),
        'container_project_id': type.OptionalType(type.StringType()),
        'external_id': type.OptionalType(type.StringType()),
        'network_errors': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'NetworkError'))),
        'network_status': type.OptionalType(type.StringType()),
        'origin_properties': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'KeyValuePair'))),
        'status': type.OptionalType(type.StringType()),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_last_sync_time': type.OptionalType(type.IntegerType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
    },
    ContainerApplication,
    False,
    None))



class ContainerApplicationInstance(VapiStruct):
    """
    Container application instance within a project.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ContainerApplicationInstance"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    NETWORK_STATUS_HEALTHY = "HEALTHY"
    """


    """
    NETWORK_STATUS_UNHEALTHY = "UNHEALTHY"
    """


    """
    STATUS_UNKNOWN = "UNKNOWN"
    """


    """
    STATUS_HEALTHY = "HEALTHY"
    """


    """
    STATUS_UP = "UP"
    """


    """
    STATUS_DOWN = "DOWN"
    """


    """
    STATUS_DEGRADED = "DEGRADED"
    """


    """



    _canonical_to_pep_names = {
                            'cluster_node_id': 'cluster_node_id',
                            'container_application_ids': 'container_application_ids',
                            'container_cluster_id': 'container_cluster_id',
                            'container_project_id': 'container_project_id',
                            'external_id': 'external_id',
                            'network_errors': 'network_errors',
                            'network_status': 'network_status',
                            'origin_properties': 'origin_properties',
                            'status': 'status',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_last_sync_time': 'last_sync_time',
                            'description': 'description',
                            'display_name': 'display_name',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            }

    def __init__(self,
                 cluster_node_id=None,
                 container_application_ids=None,
                 container_cluster_id=None,
                 container_project_id=None,
                 external_id=None,
                 network_errors=None,
                 network_status=None,
                 origin_properties=None,
                 status=None,
                 links=None,
                 schema=None,
                 self_=None,
                 last_sync_time=None,
                 description=None,
                 display_name=None,
                 resource_type='ContainerApplicationInstance',
                 tags=None,
                ):
        """
        :type  cluster_node_id: :class:`str` or ``None``
        :param cluster_node_id: Cluster node id where application instance is running.
        :type  container_application_ids: :class:`list` of :class:`str` or ``None``
        :param container_application_ids: List of identifiers of the container application.
        :type  container_cluster_id: :class:`str` or ``None``
        :param container_cluster_id: Identifier of the container cluster this application instance
            belongs to.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  container_project_id: :class:`str` or ``None``
        :param container_project_id: Identifier of the container project which this container
            application instance belongs to.
        :type  external_id: :class:`str` or ``None``
        :param external_id: Identifier of the container application instance on container
            cluster.
        :type  network_errors: :class:`list` of :class:`NetworkError` or ``None``
        :param network_errors: List of network errors related to container application instance.
        :type  network_status: :class:`str` or ``None``
        :param network_status: Possible values are: 
            
            * :attr:`ContainerApplicationInstance.NETWORK_STATUS_HEALTHY`
            * :attr:`ContainerApplicationInstance.NETWORK_STATUS_UNHEALTHY`
            
             Network status of container application instance.
        :type  origin_properties: :class:`list` of :class:`KeyValuePair` or ``None``
        :param origin_properties: Array of additional specific properties of container application
            instance in key-value format.
        :type  status: :class:`str` or ``None``
        :param status: Possible values are: 
            
            * :attr:`ContainerApplicationInstance.STATUS_UNKNOWN`
            * :attr:`ContainerApplicationInstance.STATUS_HEALTHY`
            * :attr:`ContainerApplicationInstance.STATUS_UP`
            * :attr:`ContainerApplicationInstance.STATUS_DOWN`
            * :attr:`ContainerApplicationInstance.STATUS_DEGRADED`
            
             Status of the container application instance.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  last_sync_time: :class:`long` or ``None``
        :param last_sync_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  resource_type: :class:`str`
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        """
        self.cluster_node_id = cluster_node_id
        self.container_application_ids = container_application_ids
        self.container_cluster_id = container_cluster_id
        self.container_project_id = container_project_id
        self.external_id = external_id
        self.network_errors = network_errors
        self.network_status = network_status
        self.origin_properties = origin_properties
        self.status = status
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.last_sync_time = last_sync_time
        self.description = description
        self.display_name = display_name
        self._resource_type = resource_type
        self.tags = tags
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ContainerApplicationInstance._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.container_application_instance', {
        'cluster_node_id': type.OptionalType(type.StringType()),
        'container_application_ids': type.OptionalType(type.ListType(type.StringType())),
        'container_cluster_id': type.OptionalType(type.StringType()),
        'container_project_id': type.OptionalType(type.StringType()),
        'external_id': type.OptionalType(type.StringType()),
        'network_errors': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'NetworkError'))),
        'network_status': type.OptionalType(type.StringType()),
        'origin_properties': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'KeyValuePair'))),
        'status': type.OptionalType(type.StringType()),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_last_sync_time': type.OptionalType(type.IntegerType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
    },
    ContainerApplicationInstance,
    False,
    None))



class ContainerCluster(VapiStruct):
    """
    Details of container cluster.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ContainerCluster"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    CLUSTER_TYPE_PAS = "PAS"
    """


    """
    CLUSTER_TYPE_PKS = "PKS"
    """


    """
    CLUSTER_TYPE_KUBERNETES = "Kubernetes"
    """


    """
    CLUSTER_TYPE_OPENSHIFT = "Openshift"
    """


    """
    CLUSTER_TYPE_WCP = "WCP"
    """


    """
    CLUSTER_TYPE_WCP_GUEST = "WCP_Guest"
    """


    """
    CLUSTER_TYPE_OTHER = "Other"
    """


    """
    NETWORK_STATUS_HEALTHY = "HEALTHY"
    """


    """
    NETWORK_STATUS_UNHEALTHY = "UNHEALTHY"
    """


    """



    _canonical_to_pep_names = {
                            'cluster_type': 'cluster_type',
                            'external_id': 'external_id',
                            'infrastructure': 'infrastructure',
                            'network_errors': 'network_errors',
                            'network_status': 'network_status',
                            'origin_properties': 'origin_properties',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_last_sync_time': 'last_sync_time',
                            'description': 'description',
                            'display_name': 'display_name',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            }

    def __init__(self,
                 cluster_type=None,
                 external_id=None,
                 infrastructure=None,
                 network_errors=None,
                 network_status=None,
                 origin_properties=None,
                 links=None,
                 schema=None,
                 self_=None,
                 last_sync_time=None,
                 description=None,
                 display_name=None,
                 resource_type='ContainerCluster',
                 tags=None,
                ):
        """
        :type  cluster_type: :class:`str` or ``None``
        :param cluster_type: Possible values are: 
            
            * :attr:`ContainerCluster.CLUSTER_TYPE_PAS`
            * :attr:`ContainerCluster.CLUSTER_TYPE_PKS`
            * :attr:`ContainerCluster.CLUSTER_TYPE_KUBERNETES`
            * :attr:`ContainerCluster.CLUSTER_TYPE_OPENSHIFT`
            * :attr:`ContainerCluster.CLUSTER_TYPE_WCP`
            * :attr:`ContainerCluster.CLUSTER_TYPE_WCP_GUEST`
            * :attr:`ContainerCluster.CLUSTER_TYPE_OTHER`
            
            Type of the container cluster. In case of creating container
            cluster first time, it is expected to pass the valid cluster-type.
            In case of update, if there is no change in cluster-type, then this
            field can be omitted in the request.
        :type  external_id: :class:`str` or ``None``
        :param external_id: External identifier of the container cluster.
        :type  infrastructure: :class:`ContainerInfrastructureInfo` or ``None``
        :param infrastructure: Details of underlying infrastructure that hosts the container
            cluster. In case of creating container cluster first time, it is
            expected to pass the valid infrastructure. In case of update, if
            there is no change in cluster-type, then this field can be omitted
            in the request.
        :type  network_errors: :class:`list` of :class:`NetworkError` or ``None``
        :param network_errors: List of network errors related to container cluster.
        :type  network_status: :class:`str` or ``None``
        :param network_status: Possible values are: 
            
            * :attr:`ContainerCluster.NETWORK_STATUS_HEALTHY`
            * :attr:`ContainerCluster.NETWORK_STATUS_UNHEALTHY`
            
             Network status of container cluster.
        :type  origin_properties: :class:`list` of :class:`KeyValuePair` or ``None``
        :param origin_properties: Array of additional specific properties of container cluster in
            key-value format.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  last_sync_time: :class:`long` or ``None``
        :param last_sync_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  resource_type: :class:`str`
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        """
        self.cluster_type = cluster_type
        self.external_id = external_id
        self.infrastructure = infrastructure
        self.network_errors = network_errors
        self.network_status = network_status
        self.origin_properties = origin_properties
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.last_sync_time = last_sync_time
        self.description = description
        self.display_name = display_name
        self._resource_type = resource_type
        self.tags = tags
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ContainerCluster._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.container_cluster', {
        'cluster_type': type.OptionalType(type.StringType()),
        'external_id': type.OptionalType(type.StringType()),
        'infrastructure': type.OptionalType(type.ReferenceType(__name__, 'ContainerInfrastructureInfo')),
        'network_errors': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'NetworkError'))),
        'network_status': type.OptionalType(type.StringType()),
        'origin_properties': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'KeyValuePair'))),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_last_sync_time': type.OptionalType(type.IntegerType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
    },
    ContainerCluster,
    False,
    None))



class ContainerClusterNode(VapiStruct):
    """
    Details of container cluster node i.e. container host.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ContainerClusterNode"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    NETWORK_STATUS_HEALTHY = "HEALTHY"
    """


    """
    NETWORK_STATUS_UNHEALTHY = "UNHEALTHY"
    """


    """



    _canonical_to_pep_names = {
                            'container_cluster_id': 'container_cluster_id',
                            'external_id': 'external_id',
                            'ip_addresses': 'ip_addresses',
                            'network_errors': 'network_errors',
                            'network_status': 'network_status',
                            'origin_properties': 'origin_properties',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_last_sync_time': 'last_sync_time',
                            'description': 'description',
                            'display_name': 'display_name',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            }

    def __init__(self,
                 container_cluster_id=None,
                 external_id=None,
                 ip_addresses=None,
                 network_errors=None,
                 network_status=None,
                 origin_properties=None,
                 links=None,
                 schema=None,
                 self_=None,
                 last_sync_time=None,
                 description=None,
                 display_name=None,
                 resource_type='ContainerClusterNode',
                 tags=None,
                ):
        """
        :type  container_cluster_id: :class:`str` or ``None``
        :param container_cluster_id: External identifier of the container cluster.
        :type  external_id: :class:`str` or ``None``
        :param external_id: External identifier of the container cluster node in K8S/PAS.
        :type  ip_addresses: :class:`list` of :class:`str` or ``None``
        :param ip_addresses: List of IP addresses of container cluster node. format: ip
        :type  network_errors: :class:`list` of :class:`NetworkError` or ``None``
        :param network_errors: List of network errors related to container cluster node.
        :type  network_status: :class:`str` or ``None``
        :param network_status: Possible values are: 
            
            * :attr:`ContainerClusterNode.NETWORK_STATUS_HEALTHY`
            * :attr:`ContainerClusterNode.NETWORK_STATUS_UNHEALTHY`
            
             Network status of container cluster node.
        :type  origin_properties: :class:`list` of :class:`KeyValuePair` or ``None``
        :param origin_properties: Array of additional specific properties of container cluster node
            in key-value format.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  last_sync_time: :class:`long` or ``None``
        :param last_sync_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  resource_type: :class:`str`
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        """
        self.container_cluster_id = container_cluster_id
        self.external_id = external_id
        self.ip_addresses = ip_addresses
        self.network_errors = network_errors
        self.network_status = network_status
        self.origin_properties = origin_properties
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.last_sync_time = last_sync_time
        self.description = description
        self.display_name = display_name
        self._resource_type = resource_type
        self.tags = tags
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ContainerClusterNode._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.container_cluster_node', {
        'container_cluster_id': type.OptionalType(type.StringType()),
        'external_id': type.OptionalType(type.StringType()),
        'ip_addresses': type.OptionalType(type.ListType(type.StringType())),
        'network_errors': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'NetworkError'))),
        'network_status': type.OptionalType(type.StringType()),
        'origin_properties': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'KeyValuePair'))),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_last_sync_time': type.OptionalType(type.IntegerType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
    },
    ContainerClusterNode,
    False,
    None))



class ContainerConfiguration(VapiStruct):
    """
    Represents a container to group widgets that belong to a common category or
    have a common purpose.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ContainerConfiguration"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'header': 'header',
                            'labels': 'labels',
                            'layout': 'layout',
                            'navigation': 'navigation',
                            'widgets': 'widgets',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'datasources': 'datasources',
                            'default_filter_value': 'default_filter_value',
                            'drilldown_id': 'drilldown_id',
                            'filter': 'filter',
                            'filter_value_required': 'filter_value_required',
                            'footer': 'footer',
                            'icons': 'icons',
                            'is_drilldown': 'is_drilldown',
                            'legend': 'legend',
                            'shared': 'shared',
                            'span': 'span',
                            'weight': 'weight',
                            }

    def __init__(self,
                 header=None,
                 labels=None,
                 layout=None,
                 navigation=None,
                 widgets=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ContainerConfiguration',
                 tags=None,
                 datasources=None,
                 default_filter_value=None,
                 drilldown_id=None,
                 filter=None,
                 filter_value_required=None,
                 footer=None,
                 icons=None,
                 is_drilldown=None,
                 legend=None,
                 shared=None,
                 span=None,
                 weight=None,
                ):
        """
        :type  header: :class:`Header` or ``None``
        :param header: 
        :type  labels: :class:`list` of :class:`Label` or ``None``
        :param labels: Labels for the container.
        :type  layout: :class:`Layout` or ``None``
        :param layout: Layout of widgets can be either vertical or horizontal. If layout
            is not specified a default horizontal layout is applied.
        :type  navigation: :class:`str` or ``None``
        :param navigation: Hyperlink of the specified UI page that provides details.
        :type  widgets: :class:`list` of :class:`WidgetItem` or ``None``
        :param widgets: If not specified, creates an empty container.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Title of the widget. If display_name is omitted, the widget will be
            shown without a title.
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`WidgetConfiguration.RESOURCE_TYPE_LABELVALUECONFIGURATION`
            * :attr:`WidgetConfiguration.RESOURCE_TYPE_DONUTCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_MULTIWIDGETCONFIGURATION`
            * :attr:`WidgetConfiguration.RESOURCE_TYPE_CONTAINERCONFIGURATION`
            * :attr:`WidgetConfiguration.RESOURCE_TYPE_STATSCONFIGURATION`
            * :attr:`WidgetConfiguration.RESOURCE_TYPE_GRIDCONFIGURATION`
            * :attr:`WidgetConfiguration.RESOURCE_TYPE_GRAPHCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_CUSTOMWIDGETCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_DROPDOWNFILTERWIDGETCONFIGURATION`
            
            Supported visualization types are LabelValueConfiguration,
            DonutConfiguration, GridConfiguration, StatsConfiguration,
            MultiWidgetConfiguration, GraphConfiguration,
            ContainerConfiguration, CustomWidgetConfiguration and
            DropdownFilterWidgetConfiguration.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  datasources: :class:`list` of :class:`Datasource` or ``None``
        :param datasources: The 'datasources' represent the sources from which data will be
            fetched. Currently, only NSX-API is supported as a 'default'
            datasource. An example of specifying 'default' datasource along
            with the urls to fetch data from is given at 'example_request'
            section of 'CreateWidgetConfiguration' API.
        :type  default_filter_value: :class:`list` of :class:`DefaultFilterValue` or ``None``
        :param default_filter_value: Default filter values to be passed to datasources. This will be
            used when the report is requested without filter values.
        :type  drilldown_id: :class:`str` or ``None``
        :param drilldown_id: Id of drilldown widget, if any. Id should be a valid id of an
            existing widget. A widget is considered as drilldown widget when it
            is associated with any other widget and provides more detailed
            information about any data item from the parent widget.
        :type  filter: :class:`str` or ``None``
        :param filter: Id of filter widget for subscription, if any. Id should be a valid
            id of an existing filter widget. Filter widget should be from the
            same view. Datasource URLs should have placeholder values equal to
            filter alias to accept the filter value on filter change.
        :type  filter_value_required: :class:`bool` or ``None``
        :param filter_value_required: Flag to indicate that widget will continue to work without filter
            value. If this flag is set to false then default_filter_value is
            manadatory.
        :type  footer: :class:`Footer` or ``None``
        :param footer: 
        :type  icons: :class:`list` of :class:`Icon` or ``None``
        :param icons: Icons to be applied at dashboard for widgets and UI elements.
        :type  is_drilldown: :class:`bool` or ``None``
        :param is_drilldown: Set to true if this widget should be used as a drilldown.
        :type  legend: :class:`Legend` or ``None``
        :param legend: Legend to be displayed. If legend is not needed, do not include it.
        :type  shared: :class:`bool` or ``None``
        :param shared: Please use the property 'shared' of View instead of this. The
            widgets of a shared view are visible to other users.
        :type  span: :class:`long` or ``None``
        :param span: Represents the horizontal span of the widget / container. format:
            int32
        :type  weight: :class:`long` or ``None``
        :param weight: Specify relavite weight in WidgetItem for placement in a view.
            Please see WidgetItem for details. format: int32
        """
        self.header = header
        self.labels = labels
        self.layout = layout
        self.navigation = navigation
        self.widgets = widgets
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.datasources = datasources
        self.default_filter_value = default_filter_value
        self.drilldown_id = drilldown_id
        self.filter = filter
        self.filter_value_required = filter_value_required
        self.footer = footer
        self.icons = icons
        self.is_drilldown = is_drilldown
        self.legend = legend
        self.shared = shared
        self.span = span
        self.weight = weight
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ContainerConfiguration._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.container_configuration', {
        'header': type.OptionalType(type.ReferenceType(__name__, 'Header')),
        'labels': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Label'))),
        'layout': type.OptionalType(type.ReferenceType(__name__, 'Layout')),
        'navigation': type.OptionalType(type.StringType()),
        'widgets': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'WidgetItem'))),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'datasources': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Datasource'))),
        'default_filter_value': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'DefaultFilterValue'))),
        'drilldown_id': type.OptionalType(type.StringType()),
        'filter': type.OptionalType(type.StringType()),
        'filter_value_required': type.OptionalType(type.BooleanType()),
        'footer': type.OptionalType(type.ReferenceType(__name__, 'Footer')),
        'icons': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Icon'))),
        'is_drilldown': type.OptionalType(type.BooleanType()),
        'legend': type.OptionalType(type.ReferenceType(__name__, 'Legend')),
        'shared': type.OptionalType(type.BooleanType()),
        'span': type.OptionalType(type.IntegerType()),
        'weight': type.OptionalType(type.IntegerType()),
    },
    ContainerConfiguration,
    False,
    None))



class ContainerInfrastructureInfo(VapiStruct):
    """
    Details of infrastructure hosting the container cluster e.g. vSphere, AWS,
    VMC etc..

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    INFRA_TYPE_VSPHERE = "vSphere"
    """


    """
    INFRA_TYPE_AWS = "AWS"
    """


    """
    INFRA_TYPE_AZURE = "Azure"
    """


    """
    INFRA_TYPE_VMC = "VMC"
    """


    """
    INFRA_TYPE_KVM = "KVM"
    """


    """
    INFRA_TYPE_BAREMETAL = "Baremetal"
    """


    """



    _canonical_to_pep_names = {
                            'infra_type': 'infra_type',
                            }

    def __init__(self,
                 infra_type=None,
                ):
        """
        :type  infra_type: :class:`str` or ``None``
        :param infra_type: Possible values are: 
            
            * :attr:`ContainerInfrastructureInfo.INFRA_TYPE_VSPHERE`
            * :attr:`ContainerInfrastructureInfo.INFRA_TYPE_AWS`
            * :attr:`ContainerInfrastructureInfo.INFRA_TYPE_AZURE`
            * :attr:`ContainerInfrastructureInfo.INFRA_TYPE_VMC`
            * :attr:`ContainerInfrastructureInfo.INFRA_TYPE_KVM`
            * :attr:`ContainerInfrastructureInfo.INFRA_TYPE_BAREMETAL`
            
             Type of the infrastructure.
        """
        self.infra_type = infra_type
        VapiStruct.__init__(self)


ContainerInfrastructureInfo._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.container_infrastructure_info', {
        'infra_type': type.OptionalType(type.StringType()),
    },
    ContainerInfrastructureInfo,
    False,
    None))



class ContainerIngressPolicy(VapiStruct):
    """
    Details of Container Ingress Policy.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ContainerIngressPolicy"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    NETWORK_STATUS_HEALTHY = "HEALTHY"
    """


    """
    NETWORK_STATUS_UNHEALTHY = "UNHEALTHY"
    """


    """



    _canonical_to_pep_names = {
                            'container_application_ids': 'container_application_ids',
                            'container_cluster_id': 'container_cluster_id',
                            'container_project_id': 'container_project_id',
                            'external_id': 'external_id',
                            'network_errors': 'network_errors',
                            'network_status': 'network_status',
                            'origin_properties': 'origin_properties',
                            'spec': 'spec',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_last_sync_time': 'last_sync_time',
                            'description': 'description',
                            'display_name': 'display_name',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            }

    def __init__(self,
                 container_application_ids=None,
                 container_cluster_id=None,
                 container_project_id=None,
                 external_id=None,
                 network_errors=None,
                 network_status=None,
                 origin_properties=None,
                 spec=None,
                 links=None,
                 schema=None,
                 self_=None,
                 last_sync_time=None,
                 description=None,
                 display_name=None,
                 resource_type='ContainerIngressPolicy',
                 tags=None,
                ):
        """
        :type  container_application_ids: :class:`list` of :class:`str` or ``None``
        :param container_application_ids: List of identifiers of the container application , on which ingress
            policy is applied. e.g. IDs of all services on which the ingress is
            applied in kubernetes.
        :type  container_cluster_id: :class:`str` or ``None``
        :param container_cluster_id: Identifier of the container cluster this ingress policy belongs to.
        :type  container_project_id: :class:`str` or ``None``
        :param container_project_id: Identifier of the project which this container ingress belongs to.
        :type  external_id: :class:`str` or ``None``
        :param external_id: Identifier of the container ingress policy.
        :type  network_errors: :class:`list` of :class:`NetworkError` or ``None``
        :param network_errors: List of network errors related to container ingress.
        :type  network_status: :class:`str` or ``None``
        :param network_status: Possible values are: 
            
            * :attr:`ContainerIngressPolicy.NETWORK_STATUS_HEALTHY`
            * :attr:`ContainerIngressPolicy.NETWORK_STATUS_UNHEALTHY`
            
             Network status of container ingress.
        :type  origin_properties: :class:`list` of :class:`KeyValuePair` or ``None``
        :param origin_properties: Array of additional specific properties of container ingress in
            key-value format.
        :type  spec: :class:`str` or ``None``
        :param spec: Container ingress policy specification.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  last_sync_time: :class:`long` or ``None``
        :param last_sync_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  resource_type: :class:`str`
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        """
        self.container_application_ids = container_application_ids
        self.container_cluster_id = container_cluster_id
        self.container_project_id = container_project_id
        self.external_id = external_id
        self.network_errors = network_errors
        self.network_status = network_status
        self.origin_properties = origin_properties
        self.spec = spec
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.last_sync_time = last_sync_time
        self.description = description
        self.display_name = display_name
        self._resource_type = resource_type
        self.tags = tags
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ContainerIngressPolicy._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.container_ingress_policy', {
        'container_application_ids': type.OptionalType(type.ListType(type.StringType())),
        'container_cluster_id': type.OptionalType(type.StringType()),
        'container_project_id': type.OptionalType(type.StringType()),
        'external_id': type.OptionalType(type.StringType()),
        'network_errors': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'NetworkError'))),
        'network_status': type.OptionalType(type.StringType()),
        'origin_properties': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'KeyValuePair'))),
        'spec': type.OptionalType(type.StringType()),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_last_sync_time': type.OptionalType(type.IntegerType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
    },
    ContainerIngressPolicy,
    False,
    None))



class ContainerNetworkPolicy(VapiStruct):
    """
    Network policy applied to container.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ContainerNetworkPolicy"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    NETWORK_STATUS_HEALTHY = "HEALTHY"
    """


    """
    NETWORK_STATUS_UNHEALTHY = "UNHEALTHY"
    """


    """
    POLICY_TYPE_NETWORK_POLICY = "NETWORK_POLICY"
    """


    """
    POLICY_TYPE_ASG = "ASG"
    """


    """



    _canonical_to_pep_names = {
                            'container_cluster_id': 'container_cluster_id',
                            'container_project_id': 'container_project_id',
                            'external_id': 'external_id',
                            'network_errors': 'network_errors',
                            'network_status': 'network_status',
                            'origin_properties': 'origin_properties',
                            'policy_type': 'policy_type',
                            'spec': 'spec',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_last_sync_time': 'last_sync_time',
                            'description': 'description',
                            'display_name': 'display_name',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            }

    def __init__(self,
                 container_cluster_id=None,
                 container_project_id=None,
                 external_id=None,
                 network_errors=None,
                 network_status=None,
                 origin_properties=None,
                 policy_type=None,
                 spec=None,
                 links=None,
                 schema=None,
                 self_=None,
                 last_sync_time=None,
                 description=None,
                 display_name=None,
                 resource_type='ContainerNetworkPolicy',
                 tags=None,
                ):
        """
        :type  container_cluster_id: :class:`str` or ``None``
        :param container_cluster_id: Identifier of the container cluster this network policy belongs to.
        :type  container_project_id: :class:`str` or ``None``
        :param container_project_id: Identifier of the project which this network policy belongs to.
        :type  external_id: :class:`str` or ``None``
        :param external_id: Identifier of the container network policy.
        :type  network_errors: :class:`list` of :class:`NetworkError` or ``None``
        :param network_errors: List of network errors related to container network policy.
        :type  network_status: :class:`str` or ``None``
        :param network_status: Possible values are: 
            
            * :attr:`ContainerNetworkPolicy.NETWORK_STATUS_HEALTHY`
            * :attr:`ContainerNetworkPolicy.NETWORK_STATUS_UNHEALTHY`
            
             Network status of container network policy.
        :type  origin_properties: :class:`list` of :class:`KeyValuePair` or ``None``
        :param origin_properties: Array of additional specific properties of container network policy
            in key-value format.
        :type  policy_type: :class:`str` or ``None``
        :param policy_type: Possible values are: 
            
            * :attr:`ContainerNetworkPolicy.POLICY_TYPE_NETWORK_POLICY`
            * :attr:`ContainerNetworkPolicy.POLICY_TYPE_ASG`
            
             Type e.g. Network Policy, ASG.
        :type  spec: :class:`str` or ``None``
        :param spec: Container network policy specification.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  last_sync_time: :class:`long` or ``None``
        :param last_sync_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  resource_type: :class:`str`
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        """
        self.container_cluster_id = container_cluster_id
        self.container_project_id = container_project_id
        self.external_id = external_id
        self.network_errors = network_errors
        self.network_status = network_status
        self.origin_properties = origin_properties
        self.policy_type = policy_type
        self.spec = spec
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.last_sync_time = last_sync_time
        self.description = description
        self.display_name = display_name
        self._resource_type = resource_type
        self.tags = tags
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ContainerNetworkPolicy._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.container_network_policy', {
        'container_cluster_id': type.OptionalType(type.StringType()),
        'container_project_id': type.OptionalType(type.StringType()),
        'external_id': type.OptionalType(type.StringType()),
        'network_errors': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'NetworkError'))),
        'network_status': type.OptionalType(type.StringType()),
        'origin_properties': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'KeyValuePair'))),
        'policy_type': type.OptionalType(type.StringType()),
        'spec': type.OptionalType(type.StringType()),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_last_sync_time': type.OptionalType(type.IntegerType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
    },
    ContainerNetworkPolicy,
    False,
    None))



class ContainerProject(VapiStruct):
    """
    Details of org/namespace within a container cluster.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ContainerProject"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    NETWORK_STATUS_HEALTHY = "HEALTHY"
    """


    """
    NETWORK_STATUS_UNHEALTHY = "UNHEALTHY"
    """


    """



    _canonical_to_pep_names = {
                            'container_cluster_id': 'container_cluster_id',
                            'external_id': 'external_id',
                            'network_errors': 'network_errors',
                            'network_status': 'network_status',
                            'origin_properties': 'origin_properties',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_last_sync_time': 'last_sync_time',
                            'description': 'description',
                            'display_name': 'display_name',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            }

    def __init__(self,
                 container_cluster_id=None,
                 external_id=None,
                 network_errors=None,
                 network_status=None,
                 origin_properties=None,
                 links=None,
                 schema=None,
                 self_=None,
                 last_sync_time=None,
                 description=None,
                 display_name=None,
                 resource_type='ContainerProject',
                 tags=None,
                ):
        """
        :type  container_cluster_id: :class:`str` or ``None``
        :param container_cluster_id: Identifier of the container cluster to which this project/namespace
            belongs.
        :type  external_id: :class:`str` or ``None``
        :param external_id: External identifier of the container project.
        :type  network_errors: :class:`list` of :class:`NetworkError` or ``None``
        :param network_errors: List of network errors related to container project.
        :type  network_status: :class:`str` or ``None``
        :param network_status: Possible values are: 
            
            * :attr:`ContainerProject.NETWORK_STATUS_HEALTHY`
            * :attr:`ContainerProject.NETWORK_STATUS_UNHEALTHY`
            
             Network status of container project.
        :type  origin_properties: :class:`list` of :class:`KeyValuePair` or ``None``
        :param origin_properties: Array of additional specific properties of container project in
            key-value format.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  last_sync_time: :class:`long` or ``None``
        :param last_sync_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  resource_type: :class:`str`
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        """
        self.container_cluster_id = container_cluster_id
        self.external_id = external_id
        self.network_errors = network_errors
        self.network_status = network_status
        self.origin_properties = origin_properties
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.last_sync_time = last_sync_time
        self.description = description
        self.display_name = display_name
        self._resource_type = resource_type
        self.tags = tags
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ContainerProject._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.container_project', {
        'container_cluster_id': type.OptionalType(type.StringType()),
        'external_id': type.OptionalType(type.StringType()),
        'network_errors': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'NetworkError'))),
        'network_status': type.OptionalType(type.StringType()),
        'origin_properties': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'KeyValuePair'))),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_last_sync_time': type.OptionalType(type.IntegerType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
    },
    ContainerProject,
    False,
    None))



class Criterion(VapiStruct):
    """
    Event Criterion is the logical evaluations by which the event may be deemed
    fulfilled. All the evaluations must be met in order for the criterion to be
    met (implicit AND).

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'evaluations': 'evaluations',
                            }

    def __init__(self,
                 evaluations=None,
                ):
        """
        :type  evaluations: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param evaluations: Criterion Evaluations.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`Evaluation`. When methods return a value of this class as a
            return value, the attribute will contain all the attributes defined
            in :class:`Evaluation`.
        """
        self.evaluations = evaluations
        VapiStruct.__init__(self)


Criterion._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.criterion', {
        'evaluations': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'Evaluation')]))),
    },
    Criterion,
    False,
    None))



class CsvListResult(VapiStruct):
    """
    Base type for CSV result.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'file_name': 'file_name',
                            }

    def __init__(self,
                 file_name=None,
                ):
        """
        :type  file_name: :class:`str` or ``None``
        :param file_name: File name set by HTTP server if API returns CSV result as a file.
        """
        self.file_name = file_name
        VapiStruct.__init__(self)


CsvListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.csv_list_result', {
        'file_name': type.OptionalType(type.StringType()),
    },
    CsvListResult,
    False,
    None))



class CsvRecord(VapiStruct):
    """
    Base type for CSV records.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """




    def __init__(self,
                ):
        """
        """
        VapiStruct.__init__(self)


CsvRecord._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.csv_record', {
    },
    CsvRecord,
    False,
    None))



class CurrentBackupOperationStatus(VapiStruct):
    """
    Current backup operation status

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    CURRENT_STEP_CLUSTER_BACKUP = "BACKUP_CREATING_CLUSTER_BACKUP"
    """


    """
    CURRENT_STEP_NODE_BACKUP = "BACKUP_CREATING_NODE_BACKUP"
    """


    """
    OPERATION_TYPE_NONE = "NONE"
    """


    """
    OPERATION_TYPE_BACKUP = "BACKUP"
    """


    """



    _canonical_to_pep_names = {
                            'backup_id': 'backup_id',
                            'current_step': 'current_step',
                            'current_step_message': 'current_step_message',
                            'end_time': 'end_time',
                            'operation_type': 'operation_type',
                            'start_time': 'start_time',
                            }

    def __init__(self,
                 backup_id=None,
                 current_step=None,
                 current_step_message=None,
                 end_time=None,
                 operation_type=None,
                 start_time=None,
                ):
        """
        :type  backup_id: :class:`str` or ``None``
        :param backup_id: Unique identifier of current backup
        :type  current_step: :class:`str` or ``None``
        :param current_step: Possible values are: 
            
            * :attr:`CurrentBackupOperationStatus.CURRENT_STEP_CLUSTER_BACKUP`
            * :attr:`CurrentBackupOperationStatus.CURRENT_STEP_NODE_BACKUP`
            
             Current step of operation
        :type  current_step_message: :class:`str` or ``None``
        :param current_step_message: Additional human-readable status information about current step
        :type  end_time: :class:`long` or ``None``
        :param end_time: Time when operation is expected to end format: int64
        :type  operation_type: :class:`str` or ``None``
        :param operation_type: Possible values are: 
            
            * :attr:`CurrentBackupOperationStatus.OPERATION_TYPE_NONE`
            * :attr:`CurrentBackupOperationStatus.OPERATION_TYPE_BACKUP`
            
            Type of operation that is in progress. Returns none if no operation
            is in progress, in which case none of the other fields will be set.
        :type  start_time: :class:`long` or ``None``
        :param start_time: Time when operation was started format: int64
        """
        self.backup_id = backup_id
        self.current_step = current_step
        self.current_step_message = current_step_message
        self.end_time = end_time
        self.operation_type = operation_type
        self.start_time = start_time
        VapiStruct.__init__(self)


CurrentBackupOperationStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.current_backup_operation_status', {
        'backup_id': type.OptionalType(type.StringType()),
        'current_step': type.OptionalType(type.StringType()),
        'current_step_message': type.OptionalType(type.StringType()),
        'end_time': type.OptionalType(type.IntegerType()),
        'operation_type': type.OptionalType(type.StringType()),
        'start_time': type.OptionalType(type.IntegerType()),
    },
    CurrentBackupOperationStatus,
    False,
    None))



class CustomPolicyLbPersistenceProfile(VapiStruct):
    """
    Some applications maintain state and require all relevant connections to be
    sent to the same server as the application state is not synchronized among
    servers. Persistence is enabled on a PolicyLbVirtualServer by binding a
    persistence profile to it.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "CustomPolicyLbPersistenceProfile"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    PERSISTENCE_COOKIE = "COOKIE"
    """


    """
    PERSISTENCE_SOURCE_IP = "SOURCE_IP"
    """


    """



    _canonical_to_pep_names = {
                            'persistence': 'persistence',
                            'persistence_shared': 'persistence_shared',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            }

    def __init__(self,
                 persistence=None,
                 persistence_shared=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='CustomPolicyLbPersistenceProfile',
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                ):
        """
        :type  persistence: :class:`str` or ``None``
        :param persistence: Possible values are: 
            
            * :attr:`CustomPolicyLbPersistenceProfile.PERSISTENCE_COOKIE`
            * :attr:`CustomPolicyLbPersistenceProfile.PERSISTENCE_SOURCE_IP`
            
            This field indicates the persistence method used for the
            PolicyLbVirtualServer. - COOKIE persistence allows related client
            connections, identified by the same cookie in HTTP requests [Refer
            to HTTP Cookie for details on HTTP cookies], to be redirected to
            the same server. Load balancer does not maintain any persistence
            table for cookie persistence. Instead, it encodes the necessary
            information in the HTTP cookie value sent to client and relies on
            the client to store it and send it back in subsequent related HTTP
            requests. Hence there is no limit on the number of cookie
            persistence entries that can be supported. - SOURCE_IP persistence
            ensures all connections from a client (identified by IP address)
            are sent to the same backend server for a specified period. - This
            object is not required and without creation of this object the
            virtual server persistence is disabled by default
        :type  persistence_shared: :class:`bool` or ``None``
        :param persistence_shared: Persistence shared setting indicates that all
            PolicyLbVirtualServers that consume this PolicyLbPersistenceProfile
            should share the same persistence mechanism when enabled. Meaning,
            persistence entries of a client accessing one virtual server will
            also affect the same client's connections to a different virtual
            server. For example, say there are two virtual servers vip-ip1:80
            and vip-ip1:8080 bound to the same Group g1 consisting of two
            servers (s11:80 and s12:80). By default, each virtual server will
            have its own persistence table or cookie. So, in the earlier
            example, there will be two tables (vip-ip1:80, p1) and
            (vip-ip1:8080, p1) or cookies. So, if a client connects to vip1:80
            and later connects to vip1:8080, the second connection may be sent
            to a different server than the first. When persistence_shared is
            enabled, then the second connection will always connect to the same
            server as the original connection. For COOKIE persistence type, the
            same cookie will be shared by multiple virtual servers. For
            SOURCE_IP persistenct type, the persistence table will be shared
            across virtual servers.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`PolicyLbPersistenceProfile.RESOURCE_TYPE_L4POLICYLBPERSISTENCEPROFILE`
            *
              :attr:`PolicyLbPersistenceProfile.RESOURCE_TYPE_L7POLICYLBPERSISTENCEPROFILE`
            *
              :attr:`PolicyLbPersistenceProfile.RESOURCE_TYPE_CUSTOMPOLICYLBPERSISTENCEPROFILE`
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.persistence = persistence
        self.persistence_shared = persistence_shared
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

CustomPolicyLbPersistenceProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.custom_policy_lb_persistence_profile', {
        'persistence': type.OptionalType(type.StringType()),
        'persistence_shared': type.OptionalType(type.BooleanType()),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
    },
    CustomPolicyLbPersistenceProfile,
    False,
    None))



class CustomPolicyLbVirtualServer(VapiStruct):
    """
    Virtual server acts as a facade to an application, receives all client
    connections over a specified protocol and distributes them among the
    backend servers. This custom type allows for more complex settings than the
    simplified PolicyLbVirtualServer types. This object allows for complex
    configurations for PolicyLbVirtualServers of all types. All HTTP specific
    inputs will be rejected when combined with TPC or UDP protocols.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    APP_PROTOCOL_TCP = "TCP"
    """


    """
    APP_PROTOCOL_UDP = "UDP"
    """


    """
    APP_PROTOCOL_HTTP = "HTTP"
    """


    """
    APP_PROTOCOL_HTTPS = "HTTPS"
    """


    """
    CLIENT_SSL_SETTINGS_BASE_SECURE_111317 = "BASE_SECURE_111317"
    """


    """
    CLIENT_SSL_SETTINGS_MODERATE_SECURE_111317 = "MODERATE_SECURE_111317"
    """


    """
    CLIENT_SSL_SETTINGS_HIGH_SECURE_111317 = "HIGH_SECURE_111317"
    """


    """
    SERVER_SSL_SETTINGS_BASE_SECURE_111317 = "BASE_SECURE_111317"
    """


    """
    SERVER_SSL_SETTINGS_MODERATE_SECURE_111317 = "MODERATE_SECURE_111317"
    """


    """
    SERVER_SSL_SETTINGS_HIGH_SECURE_111317 = "HIGH_SECURE_111317"
    """


    """
    SERVER_SSL_SETTINGS_DISABLED = "DISABLED"
    """


    """



    _canonical_to_pep_names = {
                            'app_protocol': 'app_protocol',
                            'client_ssl_certificate_ids': 'client_ssl_certificate_ids',
                            'client_ssl_settings': 'client_ssl_settings',
                            'default_client_ssl_certificate_id': 'default_client_ssl_certificate_id',
                            'server_auth_ca_certificate_ids': 'server_auth_ca_certificate_ids',
                            'server_ssl_settings': 'server_ssl_settings',
                            'insert_client_ip_header': 'insert_client_ip_header',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'access_log_enabled': 'access_log_enabled',
                            'ip_address': 'ip_address',
                            'lb_persistence_profile': 'lb_persistence_profile',
                            'ports': 'ports',
                            'router_path': 'router_path',
                            'traffic_source': 'traffic_source',
                            }

    def __init__(self,
                 app_protocol=None,
                 client_ssl_certificate_ids=None,
                 client_ssl_settings=None,
                 default_client_ssl_certificate_id=None,
                 server_auth_ca_certificate_ids=None,
                 server_ssl_settings=None,
                 insert_client_ip_header=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 access_log_enabled=None,
                 ip_address=None,
                 lb_persistence_profile=None,
                 ports=None,
                 router_path=None,
                 traffic_source=None,
                ):
        """
        :type  app_protocol: :class:`str` or ``None``
        :param app_protocol: Possible values are: 
            
            * :attr:`CustomPolicyLbVirtualServer.APP_PROTOCOL_TCP`
            * :attr:`CustomPolicyLbVirtualServer.APP_PROTOCOL_UDP`
            * :attr:`CustomPolicyLbVirtualServer.APP_PROTOCOL_HTTP`
            * :attr:`CustomPolicyLbVirtualServer.APP_PROTOCOL_HTTPS`
            
            As the custom type allows for more complex settings than the
            simplified PolicyLbVirtualServer types, also specify the desired
            protocol for receiving all client connections.
        :type  client_ssl_certificate_ids: :class:`list` of :class:`str` or ``None``
        :param client_ssl_certificate_ids: Client-side SSL profile binding allows multiple certificates, for
            different hostnames, to be bound to the same virtual server. The
            setting is used when load balancer acts as an SSL server and
            terminating the client SSL connection
        :type  client_ssl_settings: :class:`str` or ``None``
        :param client_ssl_settings: Possible values are: 
            
            *
              :attr:`CustomPolicyLbVirtualServer.CLIENT_SSL_SETTINGS_BASE_SECURE_111317`
            *
              :attr:`CustomPolicyLbVirtualServer.CLIENT_SSL_SETTINGS_MODERATE_SECURE_111317`
            *
              :attr:`CustomPolicyLbVirtualServer.CLIENT_SSL_SETTINGS_HIGH_SECURE_111317`
            
            Security settings representing various security settings when the
            VirtualServer acts as an SSL server - BASE_SECURE_111317 -
            MODERATE_SECURE_111317 - HIGH_SECURE_111317
        :type  default_client_ssl_certificate_id: :class:`str` or ``None``
        :param default_client_ssl_certificate_id: The setting is used when load balancer acts as an SSL server and
            terminating the client SSL connection. A default certificate should
            be specified which will be used if the server does not host
            multiple hostnames on the same IP address or if the client does not
            support SNI extension.
        :type  server_auth_ca_certificate_ids: :class:`list` of :class:`str` or ``None``
        :param server_auth_ca_certificate_ids: To support client authentication (load balancer acting as a client
            authenticating to the backend server), server_ssl_certificate_id
            can be specified. When supplied, the backend server certificate
            must be signed by one of the trusted Certificate Authorities (CAs),
            also referred to as root CAs, whose self signed certificates are
            specified. This setting is only applicable for L7 protocols and
            will be rejected in combination with TCP or UDP.
        :type  server_ssl_settings: :class:`str` or ``None``
        :param server_ssl_settings: Possible values are: 
            
            *
              :attr:`CustomPolicyLbVirtualServer.SERVER_SSL_SETTINGS_BASE_SECURE_111317`
            *
              :attr:`CustomPolicyLbVirtualServer.SERVER_SSL_SETTINGS_MODERATE_SECURE_111317`
            *
              :attr:`CustomPolicyLbVirtualServer.SERVER_SSL_SETTINGS_HIGH_SECURE_111317`
            * :attr:`CustomPolicyLbVirtualServer.SERVER_SSL_SETTINGS_DISABLED`
            
            Indicates whether to enable server side SSL. Server side SSL will
            be enabled when a specific security setting is selected. The
            selected security setting or profile represents various
            configurations related to SSL when the VirtualServer acts as a
            client connecting over SSL to the backend server. This setting is
            only applicable for L7 protocols and will be rejected in
            combination with TCP or UDP. - BASE_SECURE_111317 -
            MODERATE_SECURE_111317 - HIGH_SECURE_111317 - DISABLED
        :type  insert_client_ip_header: :class:`bool` or ``None``
        :param insert_client_ip_header: Backend web servers typically log each request they handle along
            with the requesting client IP address. These logs are used for
            debugging, analytics and other such purposes. If the deployment
            topology requires enabling SNAT on the load balancer, then server
            will see the client as the SNAT IP which defeats the purpose of
            logging. To work around this issue, load balancer can be configured
            to insert XFF HTTP header with the original client IP address.
            Backend servers can then be configured to log the IP address in XFF
            header instead of the source IP address of the connection. If XFF
            header is not present in the incoming request, load balancer
            inserts a new XFF header with the client IP address.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`PolicyLbVirtualServer.RESOURCE_TYPE_TCPPOLICYLBVIRTUALSERVER`
            *
              :attr:`PolicyLbVirtualServer.RESOURCE_TYPE_UDPPOLICYLBVIRTUALSERVER`
            *
              :attr:`PolicyLbVirtualServer.RESOURCE_TYPE_HTTPPOLICYLBVIRTUALSERVER`
            *
              :attr:`PolicyLbVirtualServer.RESOURCE_TYPE_HTTPSPOLICYLBVIRTUALSERVER`
            *
              :attr:`PolicyLbVirtualServer.RESOURCE_TYPE_CUSTOMPOLICYLBVIRTUALSERVER`
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  access_log_enabled: :class:`bool` or ``None``
        :param access_log_enabled: If access log is enabled, all HTTP requests sent to an L7 virtual
            server are logged to the access log file. Both successful requests
            (backend server returns 2xx) and unsuccessful requests (backend
            server returns 4xx or 5xx) are logged to access log, if enabled.
        :type  ip_address: :class:`str` or ``None``
        :param ip_address: Configures the IP address of the PolicyLbVirtualServer where it
            receives all client connections and distributes them among the
            backend servers. format: ip
        :type  lb_persistence_profile: :class:`str` or ``None``
        :param lb_persistence_profile: Path to optional object that enables persistence on a virtual
            server allowing related client connections to be sent to the same
            backend server. Persistence is disabled by default.
        :type  ports: :class:`list` of :class:`str` or ``None``
        :param ports: Ports contains a list of at least one port or port range such as
            \"80\", \"1234-1236\". Each port element in the list should be a
            single port or a single port range. format: port-or-range
        :type  router_path: :class:`str` or ``None``
        :param router_path: Path to router type object that PolicyLbVirtualServer connects to.
            The only supported router object is Network.
        :type  traffic_source: :class:`str` or ``None``
        :param traffic_source: 
        """
        self.app_protocol = app_protocol
        self.client_ssl_certificate_ids = client_ssl_certificate_ids
        self.client_ssl_settings = client_ssl_settings
        self.default_client_ssl_certificate_id = default_client_ssl_certificate_id
        self.server_auth_ca_certificate_ids = server_auth_ca_certificate_ids
        self.server_ssl_settings = server_ssl_settings
        self.insert_client_ip_header = insert_client_ip_header
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.access_log_enabled = access_log_enabled
        self.ip_address = ip_address
        self.lb_persistence_profile = lb_persistence_profile
        self.ports = ports
        self.router_path = router_path
        self.traffic_source = traffic_source
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

CustomPolicyLbVirtualServer._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.custom_policy_lb_virtual_server', {
        'app_protocol': type.OptionalType(type.StringType()),
        'client_ssl_certificate_ids': type.OptionalType(type.ListType(type.StringType())),
        'client_ssl_settings': type.OptionalType(type.StringType()),
        'default_client_ssl_certificate_id': type.OptionalType(type.StringType()),
        'server_auth_ca_certificate_ids': type.OptionalType(type.ListType(type.StringType())),
        'server_ssl_settings': type.OptionalType(type.StringType()),
        'insert_client_ip_header': type.OptionalType(type.BooleanType()),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'access_log_enabled': type.OptionalType(type.BooleanType()),
        'ip_address': type.OptionalType(type.StringType()),
        'lb_persistence_profile': type.OptionalType(type.StringType()),
        'ports': type.OptionalType(type.ListType(type.StringType())),
        'router_path': type.OptionalType(type.StringType()),
        'traffic_source': type.OptionalType(type.StringType()),
    },
    CustomPolicyLbVirtualServer,
    False,
    None))



class CustomWidgetConfiguration(VapiStruct):
    """
    Represents configuration for custom widget. For this widget the data source
    is not applicable. It defines ui identifer to identify UI component and
    render it on dashboard view. This configuration can only be used for system
    owned widgets.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "CustomWidgetConfiguration"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'ui_component_identifier': 'ui_component_identifier',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'datasources': 'datasources',
                            'default_filter_value': 'default_filter_value',
                            'drilldown_id': 'drilldown_id',
                            'filter': 'filter',
                            'filter_value_required': 'filter_value_required',
                            'footer': 'footer',
                            'icons': 'icons',
                            'is_drilldown': 'is_drilldown',
                            'legend': 'legend',
                            'shared': 'shared',
                            'span': 'span',
                            'weight': 'weight',
                            }

    def __init__(self,
                 ui_component_identifier=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='CustomWidgetConfiguration',
                 tags=None,
                 datasources=None,
                 default_filter_value=None,
                 drilldown_id=None,
                 filter=None,
                 filter_value_required=None,
                 footer=None,
                 icons=None,
                 is_drilldown=None,
                 legend=None,
                 shared=None,
                 span=None,
                 weight=None,
                ):
        """
        :type  ui_component_identifier: :class:`str` or ``None``
        :param ui_component_identifier: User defined component selector to be rendered inside
            view/container.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Title of the widget. If display_name is omitted, the widget will be
            shown without a title.
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`WidgetConfiguration.RESOURCE_TYPE_LABELVALUECONFIGURATION`
            * :attr:`WidgetConfiguration.RESOURCE_TYPE_DONUTCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_MULTIWIDGETCONFIGURATION`
            * :attr:`WidgetConfiguration.RESOURCE_TYPE_CONTAINERCONFIGURATION`
            * :attr:`WidgetConfiguration.RESOURCE_TYPE_STATSCONFIGURATION`
            * :attr:`WidgetConfiguration.RESOURCE_TYPE_GRIDCONFIGURATION`
            * :attr:`WidgetConfiguration.RESOURCE_TYPE_GRAPHCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_CUSTOMWIDGETCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_DROPDOWNFILTERWIDGETCONFIGURATION`
            
            Supported visualization types are LabelValueConfiguration,
            DonutConfiguration, GridConfiguration, StatsConfiguration,
            MultiWidgetConfiguration, GraphConfiguration,
            ContainerConfiguration, CustomWidgetConfiguration and
            DropdownFilterWidgetConfiguration.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  datasources: :class:`list` of :class:`Datasource` or ``None``
        :param datasources: The 'datasources' represent the sources from which data will be
            fetched. Currently, only NSX-API is supported as a 'default'
            datasource. An example of specifying 'default' datasource along
            with the urls to fetch data from is given at 'example_request'
            section of 'CreateWidgetConfiguration' API.
        :type  default_filter_value: :class:`list` of :class:`DefaultFilterValue` or ``None``
        :param default_filter_value: Default filter values to be passed to datasources. This will be
            used when the report is requested without filter values.
        :type  drilldown_id: :class:`str` or ``None``
        :param drilldown_id: Id of drilldown widget, if any. Id should be a valid id of an
            existing widget. A widget is considered as drilldown widget when it
            is associated with any other widget and provides more detailed
            information about any data item from the parent widget.
        :type  filter: :class:`str` or ``None``
        :param filter: Id of filter widget for subscription, if any. Id should be a valid
            id of an existing filter widget. Filter widget should be from the
            same view. Datasource URLs should have placeholder values equal to
            filter alias to accept the filter value on filter change.
        :type  filter_value_required: :class:`bool` or ``None``
        :param filter_value_required: Flag to indicate that widget will continue to work without filter
            value. If this flag is set to false then default_filter_value is
            manadatory.
        :type  footer: :class:`Footer` or ``None``
        :param footer: 
        :type  icons: :class:`list` of :class:`Icon` or ``None``
        :param icons: Icons to be applied at dashboard for widgets and UI elements.
        :type  is_drilldown: :class:`bool` or ``None``
        :param is_drilldown: Set to true if this widget should be used as a drilldown.
        :type  legend: :class:`Legend` or ``None``
        :param legend: Legend to be displayed. If legend is not needed, do not include it.
        :type  shared: :class:`bool` or ``None``
        :param shared: Please use the property 'shared' of View instead of this. The
            widgets of a shared view are visible to other users.
        :type  span: :class:`long` or ``None``
        :param span: Represents the horizontal span of the widget / container. format:
            int32
        :type  weight: :class:`long` or ``None``
        :param weight: Specify relavite weight in WidgetItem for placement in a view.
            Please see WidgetItem for details. format: int32
        """
        self.ui_component_identifier = ui_component_identifier
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.datasources = datasources
        self.default_filter_value = default_filter_value
        self.drilldown_id = drilldown_id
        self.filter = filter
        self.filter_value_required = filter_value_required
        self.footer = footer
        self.icons = icons
        self.is_drilldown = is_drilldown
        self.legend = legend
        self.shared = shared
        self.span = span
        self.weight = weight
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

CustomWidgetConfiguration._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.custom_widget_configuration', {
        'ui_component_identifier': type.OptionalType(type.StringType()),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'datasources': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Datasource'))),
        'default_filter_value': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'DefaultFilterValue'))),
        'drilldown_id': type.OptionalType(type.StringType()),
        'filter': type.OptionalType(type.StringType()),
        'filter_value_required': type.OptionalType(type.BooleanType()),
        'footer': type.OptionalType(type.ReferenceType(__name__, 'Footer')),
        'icons': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Icon'))),
        'is_drilldown': type.OptionalType(type.BooleanType()),
        'legend': type.OptionalType(type.ReferenceType(__name__, 'Legend')),
        'shared': type.OptionalType(type.BooleanType()),
        'span': type.OptionalType(type.IntegerType()),
        'weight': type.OptionalType(type.IntegerType()),
    },
    CustomWidgetConfiguration,
    False,
    None))



class CvxConnectionInfo(VapiStruct):
    """
    Credential info to connect to a CVX type of enforcement point.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "CvxConnectionInfo"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'password': 'password',
                            'thumbprint': 'thumbprint',
                            'username': 'username',
                            'enforcement_point_address': 'enforcement_point_address',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 password=None,
                 thumbprint=None,
                 username=None,
                 enforcement_point_address=None,
                 resource_type='CvxConnectionInfo',
                ):
        """
        :type  password: :class:`str` or ``None``
        :param password: Password.
        :type  thumbprint: :class:`str` or ``None``
        :param thumbprint: Thumbprint of EnforcementPoint in the form of a SHA-256 hash
            represented in lower case HEX.
        :type  username: :class:`str` or ``None``
        :param username: Username.
        :type  enforcement_point_address: :class:`str` or ``None``
        :param enforcement_point_address: Value of this property could be Hostname or IP. For instance: - On
            an NSX-T MP running on default port, the value could be
            \"10.192.1.1\" - On an NSX-T MP running on custom port, the value
            could be \"192.168.1.1:32789\" - On an NSX-T MP in VMC deployments,
            the value could be \"192.168.1.1:5480/nsxapi\"
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`EnforcementPointConnectionInfo.RESOURCE_TYPE_NSXTCONNECTIONINFO`
            *
              :attr:`EnforcementPointConnectionInfo.RESOURCE_TYPE_NSXVCONNECTIONINFO`
            *
              :attr:`EnforcementPointConnectionInfo.RESOURCE_TYPE_CVXCONNECTIONINFO`
            
             Resource Type of Enforcement Point Connection Info.
        """
        self.password = password
        self.thumbprint = thumbprint
        self.username = username
        self.enforcement_point_address = enforcement_point_address
        self._resource_type = resource_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

CvxConnectionInfo._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.cvx_connection_info', {
        'password': type.OptionalType(type.StringType()),
        'thumbprint': type.OptionalType(type.StringType()),
        'username': type.OptionalType(type.StringType()),
        'enforcement_point_address': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
    },
    CvxConnectionInfo,
    False,
    None))



class DNSForwarderStatisticsPerEnforcementPoint(VapiStruct):
    """
    DNS forwarder statistics per enforcement point.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "DNSForwarderStatisticsPerEnforcementPoint"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    RESOURCE_TYPE_NSXTDNSFORWARDERSTATISTICS = "NsxTDNSForwarderStatistics"
    """


    """



    _canonical_to_pep_names = {
                            'enforcement_point_path': 'enforcement_point_path',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 enforcement_point_path=None,
                 resource_type='DNSForwarderStatisticsPerEnforcementPoint',
                ):
        """
        :type  enforcement_point_path: :class:`str` or ``None``
        :param enforcement_point_path: Policy path referencing the enforcement point from where the
            statistics are fetched.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`DNSForwarderStatisticsPerEnforcementPoint.RESOURCE_TYPE_NSXTDNSFORWARDERSTATISTICS`
        """
        self.enforcement_point_path = enforcement_point_path
        self._resource_type = resource_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

DNSForwarderStatisticsPerEnforcementPoint._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.DNS_forwarder_statistics_per_enforcement_point', {
        'enforcement_point_path': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
    },
    DNSForwarderStatisticsPerEnforcementPoint,
    False,
    None))



class DNSForwarderStatusPerEnforcementPoint(VapiStruct):
    """
    DNS forwarder status per enforcement point.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "DNSForwarderStatusPerEnforcementPoint"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    RESOURCE_TYPE_NSXTDNSFORWARDERSTATUS = "NsxTDNSForwarderStatus"
    """


    """



    _canonical_to_pep_names = {
                            'enforcement_point_path': 'enforcement_point_path',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 enforcement_point_path=None,
                 resource_type='DNSForwarderStatusPerEnforcementPoint',
                ):
        """
        :type  enforcement_point_path: :class:`str` or ``None``
        :param enforcement_point_path: Policy path referencing the enforcement point from where the status
            is fetched.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`DNSForwarderStatusPerEnforcementPoint.RESOURCE_TYPE_NSXTDNSFORWARDERSTATUS`
        """
        self.enforcement_point_path = enforcement_point_path
        self._resource_type = resource_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

DNSForwarderStatusPerEnforcementPoint._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.DNS_forwarder_status_per_enforcement_point', {
        'enforcement_point_path': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
    },
    DNSForwarderStatusPerEnforcementPoint,
    False,
    None))



class DataCounter(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'dropped': 'dropped',
                            'multicast_broadcast': 'multicast_broadcast',
                            'total': 'total',
                            }

    def __init__(self,
                 dropped=None,
                 multicast_broadcast=None,
                 total=None,
                ):
        """
        :type  dropped: :class:`long` or ``None``
        :param dropped: The dropped packets or bytes format: int64
        :type  multicast_broadcast: :class:`long` or ``None``
        :param multicast_broadcast: The multicast and broadcast packets or bytes format: int64
        :type  total: :class:`long` or ``None``
        :param total: The total packets or bytes format: int64
        """
        self.dropped = dropped
        self.multicast_broadcast = multicast_broadcast
        self.total = total
        VapiStruct.__init__(self)


DataCounter._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.data_counter', {
        'dropped': type.OptionalType(type.IntegerType()),
        'multicast_broadcast': type.OptionalType(type.IntegerType()),
        'total': type.OptionalType(type.IntegerType()),
    },
    DataCounter,
    False,
    None))



class DataSourceParameters(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    SOURCE_REALTIME = "realtime"
    """


    """
    SOURCE_CACHED = "cached"
    """


    """



    _canonical_to_pep_names = {
                            'source': 'source',
                            }

    def __init__(self,
                 source=None,
                ):
        """
        :type  source: :class:`str` or ``None``
        :param source: Possible values are: 
            
            * :attr:`DataSourceParameters.SOURCE_REALTIME`
            * :attr:`DataSourceParameters.SOURCE_CACHED`
            
            The data source, either realtime or cached. If not provided, cached
            data is returned.
        """
        self.source = source
        VapiStruct.__init__(self)


DataSourceParameters._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.data_source_parameters', {
        'source': type.OptionalType(type.StringType()),
    },
    DataSourceParameters,
    False,
    None))



class Datasource(VapiStruct):
    """
    An instance of a datasource configuration.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'display_name': 'display_name',
                            'urls': 'urls',
                            }

    def __init__(self,
                 display_name=None,
                 urls=None,
                ):
        """
        :type  display_name: :class:`str` or ``None``
        :param display_name: Name of a datasource instance.
        :type  urls: :class:`list` of :class:`UrlAlias` or ``None``
        :param urls: Array of urls relative to the datasource configuration. For
            example, api/v1/fabric/nodes is a relative url of nsx-manager
            instance.
        """
        self.display_name = display_name
        self.urls = urls
        VapiStruct.__init__(self)


Datasource._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.datasource', {
        'display_name': type.OptionalType(type.StringType()),
        'urls': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'UrlAlias'))),
    },
    Datasource,
    False,
    None))



class DefaultFilterValue(VapiStruct):
    """
    An instance of a datasource configuration.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'alias': 'alias',
                            'value': 'value',
                            }

    def __init__(self,
                 alias=None,
                 value=None,
                ):
        """
        :type  alias: :class:`str` or ``None``
        :param alias: Filter alias.
        :type  value: :class:`str` or ``None``
        :param value: Filter default value.
        """
        self.alias = alias
        self.value = value
        VapiStruct.__init__(self)


DefaultFilterValue._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.default_filter_value', {
        'alias': type.OptionalType(type.StringType()),
        'value': type.OptionalType(type.StringType()),
    },
    DefaultFilterValue,
    False,
    None))



class DeploymentTemplate(VapiStruct):
    """
    Deployment Template holds the attributes specific to partner for which the
    service is created. These attributes are opaque to NSX.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'attributes': 'attributes',
                            'name': 'name',
                            }

    def __init__(self,
                 attributes=None,
                 name=None,
                ):
        """
        :type  attributes: :class:`list` of :class:`Attribute` or ``None``
        :param attributes: List of attributes specific to a partner for which the service is
            created. There attributes are passed on to the partner appliance
            and is opaque to the NSX Manager.
        :type  name: :class:`str` or ``None``
        :param name: Deployment Template name.
        """
        self.attributes = attributes
        self.name = name
        VapiStruct.__init__(self)


DeploymentTemplate._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.deployment_template', {
        'attributes': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Attribute'))),
        'name': type.OptionalType(type.StringType()),
    },
    DeploymentTemplate,
    False,
    None))



class DeploymentZone(VapiStruct):
    """
    Logical grouping of enforcement points. This is a deprecated type.
    DeploymentZone has been renamed to Site. Use Site.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'enforcement_points': 'enforcement_points',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 enforcement_points=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  enforcement_points: :class:`list` of :class:`EnforcementPoint` or ``None``
        :param enforcement_points: Logical grouping of enforcement points
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.enforcement_points = enforcement_points
        VapiStruct.__init__(self)


DeploymentZone._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.deployment_zone', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'enforcement_points': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'EnforcementPoint'))),
    },
    DeploymentZone,
    False,
    None))



class DeploymentZoneListResult(VapiStruct):
    """
    Paged Collection of Deployment Zones. This is a deprecated type.
    DeploymentZone has been renamed to Site. Use SiteListResult.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`DeploymentZone` or ``None``
        :param results: Deployment Zones
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


DeploymentZoneListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.deployment_zone_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'DeploymentZone'))),
    },
    DeploymentZoneListResult,
    False,
    None))



class DfwFirewallConfiguration(VapiStruct):
    """
    DFW Firewall related configurations

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "DfwFirewallConfiguration"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'idfw_enabled': 'idfw_enabled',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'disable_auto_drafts': 'disable_auto_drafts',
                            'enable_firewall': 'enable_firewall',
                            }

    def __init__(self,
                 idfw_enabled=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='DfwFirewallConfiguration',
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 disable_auto_drafts=None,
                 enable_firewall=None,
                ):
        """
        :type  idfw_enabled: :class:`bool` or ``None``
        :param idfw_enabled: If set to true, identity firewall is enabled.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`FirewallConfiguration.RESOURCE_TYPE_DFWFIREWALLCONFIGURATION`
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  disable_auto_drafts: :class:`bool` or ``None``
        :param disable_auto_drafts: To disable auto drafts, set it to true. By default, auto drafts are
            enabled.
        :type  enable_firewall: :class:`bool` or ``None``
        :param enable_firewall: If set to true, Firewall is enabled.
        """
        self.idfw_enabled = idfw_enabled
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.disable_auto_drafts = disable_auto_drafts
        self.enable_firewall = enable_firewall
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

DfwFirewallConfiguration._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.dfw_firewall_configuration', {
        'idfw_enabled': type.OptionalType(type.BooleanType()),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'disable_auto_drafts': type.OptionalType(type.BooleanType()),
        'enable_firewall': type.OptionalType(type.BooleanType()),
    },
    DfwFirewallConfiguration,
    False,
    None))



class DhcpHeader(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    OP_CODE_BOOTREQUEST = "BOOTREQUEST"
    """


    """
    OP_CODE_BOOTREPLY = "BOOTREPLY"
    """


    """



    _canonical_to_pep_names = {
                            'op_code': 'op_code',
                            }

    def __init__(self,
                 op_code=None,
                ):
        """
        :type  op_code: :class:`str` or ``None``
        :param op_code: Possible values are: 
            
            * :attr:`DhcpHeader.OP_CODE_BOOTREQUEST`
            * :attr:`DhcpHeader.OP_CODE_BOOTREPLY`
            
            This is used to specify the general type of message. A client
            sending request to a server uses an op code of BOOTREQUEST, while a
            server replying uses an op code of BOOTREPLY.
        """
        self.op_code = op_code
        VapiStruct.__init__(self)


DhcpHeader._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.dhcp_header', {
        'op_code': type.OptionalType(type.StringType()),
    },
    DhcpHeader,
    False,
    None))



class DhcpIpPoolUsage(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'allocated_number': 'allocated_number',
                            'allocated_percentage': 'allocated_percentage',
                            'dhcp_ip_pool_id': 'dhcp_ip_pool_id',
                            'pool_size': 'pool_size',
                            }

    def __init__(self,
                 allocated_number=None,
                 allocated_percentage=None,
                 dhcp_ip_pool_id=None,
                 pool_size=None,
                ):
        """
        :type  allocated_number: :class:`long` or ``None``
        :param allocated_number: allocated number. COULD BE INACCURATE, REFERENCE ONLY. format:
            int64
        :type  allocated_percentage: :class:`long` or ``None``
        :param allocated_percentage: allocated percentage. COULD BE INACCURATE, REFERENCE ONLY. format:
            int64
        :type  dhcp_ip_pool_id: :class:`str` or ``None``
        :param dhcp_ip_pool_id: uuid of dhcp ip pool
        :type  pool_size: :class:`long` or ``None``
        :param pool_size: pool size format: int64
        """
        self.allocated_number = allocated_number
        self.allocated_percentage = allocated_percentage
        self.dhcp_ip_pool_id = dhcp_ip_pool_id
        self.pool_size = pool_size
        VapiStruct.__init__(self)


DhcpIpPoolUsage._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.dhcp_ip_pool_usage', {
        'allocated_number': type.OptionalType(type.IntegerType()),
        'allocated_percentage': type.OptionalType(type.IntegerType()),
        'dhcp_ip_pool_id': type.OptionalType(type.StringType()),
        'pool_size': type.OptionalType(type.IntegerType()),
    },
    DhcpIpPoolUsage,
    False,
    None))



class DhcpLeasePerIP(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'expire_time': 'expire_time',
                            'ip_address': 'ip_address',
                            'lease_time': 'lease_time',
                            'mac_address': 'mac_address',
                            'start_time': 'start_time',
                            'subnet': 'subnet',
                            }

    def __init__(self,
                 expire_time=None,
                 ip_address=None,
                 lease_time=None,
                 mac_address=None,
                 start_time=None,
                 subnet=None,
                ):
        """
        :type  expire_time: :class:`str` or ``None``
        :param expire_time: expire time of the lease
        :type  ip_address: :class:`str` or ``None``
        :param ip_address: ip address of client
        :type  lease_time: :class:`str` or ``None``
        :param lease_time: lease time of the ip address, in seconds
        :type  mac_address: :class:`str` or ``None``
        :param mac_address: mac address of client
        :type  start_time: :class:`str` or ``None``
        :param start_time: start time of lease
        :type  subnet: :class:`str` or ``None``
        :param subnet: subnet of client network
        """
        self.expire_time = expire_time
        self.ip_address = ip_address
        self.lease_time = lease_time
        self.mac_address = mac_address
        self.start_time = start_time
        self.subnet = subnet
        VapiStruct.__init__(self)


DhcpLeasePerIP._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.dhcp_lease_per_IP', {
        'expire_time': type.OptionalType(type.StringType()),
        'ip_address': type.OptionalType(type.StringType()),
        'lease_time': type.OptionalType(type.StringType()),
        'mac_address': type.OptionalType(type.StringType()),
        'start_time': type.OptionalType(type.StringType()),
        'subnet': type.OptionalType(type.StringType()),
    },
    DhcpLeasePerIP,
    False,
    None))



class DhcpLeases(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'dhcp_server_id': 'dhcp_server_id',
                            'leases': 'leases',
                            'timestamp': 'timestamp',
                            }

    def __init__(self,
                 dhcp_server_id=None,
                 leases=None,
                 timestamp=None,
                ):
        """
        :type  dhcp_server_id: :class:`str` or ``None``
        :param dhcp_server_id: dhcp server uuid
        :type  leases: :class:`list` of :class:`DhcpLeasePerIP` or ``None``
        :param leases: The lease info list of the server
        :type  timestamp: :class:`long` or ``None``
        :param timestamp: timestamp of the lease info format: int64
        """
        self.dhcp_server_id = dhcp_server_id
        self.leases = leases
        self.timestamp = timestamp
        VapiStruct.__init__(self)


DhcpLeases._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.dhcp_leases', {
        'dhcp_server_id': type.OptionalType(type.StringType()),
        'leases': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'DhcpLeasePerIP'))),
        'timestamp': type.OptionalType(type.IntegerType()),
    },
    DhcpLeases,
    False,
    None))



class DhcpLeasesResult(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'dhcp_server_id': 'dhcp_server_id',
                            'leases': 'leases',
                            'timestamp': 'timestamp',
                            'connectivity_path': 'connectivity_path',
                            }

    def __init__(self,
                 dhcp_server_id=None,
                 leases=None,
                 timestamp=None,
                 connectivity_path=None,
                ):
        """
        :type  dhcp_server_id: :class:`str` or ``None``
        :param dhcp_server_id: dhcp server uuid
        :type  leases: :class:`list` of :class:`DhcpLeasePerIP` or ``None``
        :param leases: The lease info list of the server
        :type  timestamp: :class:`long` or ``None``
        :param timestamp: timestamp of the lease info format: int64
        :type  connectivity_path: :class:`str` or ``None``
        :param connectivity_path: Policy path to Segment, Tier0 or Tier1 gateway where DHCP server is
            attached.
        """
        self.dhcp_server_id = dhcp_server_id
        self.leases = leases
        self.timestamp = timestamp
        self.connectivity_path = connectivity_path
        VapiStruct.__init__(self)


DhcpLeasesResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.dhcp_leases_result', {
        'dhcp_server_id': type.OptionalType(type.StringType()),
        'leases': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'DhcpLeasePerIP'))),
        'timestamp': type.OptionalType(type.IntegerType()),
        'connectivity_path': type.OptionalType(type.StringType()),
    },
    DhcpLeasesResult,
    False,
    None))



class DhcpOption121(VapiStruct):
    """
    DHCP option 121 to define classless static route.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'static_routes': 'static_routes',
                            }

    def __init__(self,
                 static_routes=None,
                ):
        """
        :type  static_routes: :class:`list` of :class:`ClasslessStaticRoute` or ``None``
        :param static_routes: Classless static route of DHCP option 121.
        """
        self.static_routes = static_routes
        VapiStruct.__init__(self)


DhcpOption121._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.dhcp_option121', {
        'static_routes': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ClasslessStaticRoute'))),
    },
    DhcpOption121,
    False,
    None))



class DhcpRelayConfig(VapiStruct):
    """
    DHCP relay configuration. Please note, the realized-state of this entity
    returned by the \"GET /policy/api/v1/infra/realized-state/realized-entity\"
    with this entity policy-path is irrelevant with the application status of
    this entity. Please do not rely on this returned realized-state to
    determine how this dhcp-relay-config was applied. The dhcp realization
    information was reflected in the realization states of the referencing
    Segment or T0/T1 gateway.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'server_addresses': 'server_addresses',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 server_addresses=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  server_addresses: :class:`list` of :class:`str` or ``None``
        :param server_addresses: DHCP server IP addresses for DHCP relay configuration. Both IPv4
            and IPv6 addresses are supported. format: ip
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.server_addresses = server_addresses
        VapiStruct.__init__(self)


DhcpRelayConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.dhcp_relay_config', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'server_addresses': type.OptionalType(type.ListType(type.StringType())),
    },
    DhcpRelayConfig,
    False,
    None))



class DhcpRelayConfigListResult(VapiStruct):
    """
    Paged collection of DhcpRelayConfigs

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`DhcpRelayConfig` or ``None``
        :param results: DhcpRelayConfig results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


DhcpRelayConfigListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.dhcp_relay_config_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'DhcpRelayConfig'))),
    },
    DhcpRelayConfigListResult,
    False,
    None))



class DhcpServerConfig(VapiStruct):
    """
    DHCP server configuration. Please note, the realized-state of this entity
    returned by the \"GET /policy/api/v1/infra/realized-state/realized-entity\"
    with this entity policy-path is irrelevant with the application status of
    this entity. Please do not rely on this returned realized-state to
    determine how this dhcp-server-config was applied. The dhcp realization
    information was reflected in the realization states of the referencing
    Segment or T0/T1 gateway.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'edge_cluster_path': 'edge_cluster_path',
                            'lease_time': 'lease_time',
                            'preferred_edge_paths': 'preferred_edge_paths',
                            'server_address': 'server_address',
                            'server_addresses': 'server_addresses',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 edge_cluster_path=None,
                 lease_time=None,
                 preferred_edge_paths=None,
                 server_address=None,
                 server_addresses=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  edge_cluster_path: :class:`str` or ``None``
        :param edge_cluster_path: Edge cluster path. Auto assigned if only one edge cluster is
            configured on enforcement-point. Modifying edge cluster will
            reallocate DHCP server to the new edge cluster. Please note that
            re-allocating edge-cluster will result in losing of all exisitng
            DHCP lease information. Change edge cluster only when losing DHCP
            leases is not a real problem, e.g. cross-site migration or failover
            and all client hosts will be reboot and get new IP addresses.
        :type  lease_time: :class:`long` or ``None``
        :param lease_time: IP address lease time in seconds. format: int64
        :type  preferred_edge_paths: :class:`list` of :class:`str` or ``None``
        :param preferred_edge_paths: Policy paths to edge nodes on which the DHCP servers run. The first
            edge node is assigned as active edge, and second one as stanby
            edge. If only one edge node is specified, the DHCP servers will run
            without HA support. When this property is not specified, edge nodes
            are auto-assigned during realization of the DHCP server.
        :type  server_address: :class:`str` or ``None``
        :param server_address: DHCP server address in CIDR format. Prefix length should be less
            than or equal to 30. DHCP server is deployed as DHCP relay service.
            This property is deprecated, use server_addresses instead. Both
            properties cannot be specified together with different new values.
            format: ip-cidr-block
        :type  server_addresses: :class:`list` of :class:`str` or ``None``
        :param server_addresses: DHCP server address in CIDR format. Both IPv4 and IPv6 address
            families are supported. Prefix length should be less than or equal
            to 30 for IPv4 address family and less than or equal to 126 for
            IPv6. When not specified, IPv4 value is auto-assigned to
            100.96.0.1/30. Ignored when this object is configured at a Segment.
            format: ip-cidr-block
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.edge_cluster_path = edge_cluster_path
        self.lease_time = lease_time
        self.preferred_edge_paths = preferred_edge_paths
        self.server_address = server_address
        self.server_addresses = server_addresses
        VapiStruct.__init__(self)


DhcpServerConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.dhcp_server_config', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'edge_cluster_path': type.OptionalType(type.StringType()),
        'lease_time': type.OptionalType(type.IntegerType()),
        'preferred_edge_paths': type.OptionalType(type.ListType(type.StringType())),
        'server_address': type.OptionalType(type.StringType()),
        'server_addresses': type.OptionalType(type.ListType(type.StringType())),
    },
    DhcpServerConfig,
    False,
    None))



class DhcpServerConfigListResult(VapiStruct):
    """
    Paged collection of DhcpServerConfigs

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`DhcpServerConfig` or ``None``
        :param results: DhcpServerConfig results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


DhcpServerConfigListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.dhcp_server_config_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'DhcpServerConfig'))),
    },
    DhcpServerConfigListResult,
    False,
    None))



class DhcpServerState(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    STATE_PENDING = "pending"
    """


    """
    STATE_IN_PROGRESS = "in_progress"
    """


    """
    STATE_SUCCESS = "success"
    """


    """
    STATE_FAILED = "failed"
    """


    """
    STATE_PARTIAL_SUCCESS = "partial_success"
    """


    """
    STATE_ORPHANED = "orphaned"
    """


    """
    STATE_UNKNOWN = "unknown"
    """


    """
    STATE_ERROR = "error"
    """


    """
    STATE_IN_SYNC = "in_sync"
    """


    """
    STATE_NOT_AVAILABLE = "NOT_AVAILABLE"
    """


    """
    STATE_VM_DEPLOYMENT_QUEUED = "VM_DEPLOYMENT_QUEUED"
    """


    """
    STATE_VM_DEPLOYMENT_IN_PROGRESS = "VM_DEPLOYMENT_IN_PROGRESS"
    """


    """
    STATE_VM_DEPLOYMENT_FAILED = "VM_DEPLOYMENT_FAILED"
    """


    """
    STATE_VM_POWER_ON_IN_PROGRESS = "VM_POWER_ON_IN_PROGRESS"
    """


    """
    STATE_VM_POWER_ON_FAILED = "VM_POWER_ON_FAILED"
    """


    """
    STATE_REGISTRATION_PENDING = "REGISTRATION_PENDING"
    """


    """
    STATE_NODE_NOT_READY = "NODE_NOT_READY"
    """


    """
    STATE_NODE_READY = "NODE_READY"
    """


    """
    STATE_VM_POWER_OFF_IN_PROGRESS = "VM_POWER_OFF_IN_PROGRESS"
    """


    """
    STATE_VM_POWER_OFF_FAILED = "VM_POWER_OFF_FAILED"
    """


    """
    STATE_VM_UNDEPLOY_IN_PROGRESS = "VM_UNDEPLOY_IN_PROGRESS"
    """


    """
    STATE_VM_UNDEPLOY_FAILED = "VM_UNDEPLOY_FAILED"
    """


    """
    STATE_VM_UNDEPLOY_SUCCESSFUL = "VM_UNDEPLOY_SUCCESSFUL"
    """


    """
    STATE_EDGE_CONFIG_ERROR = "EDGE_CONFIG_ERROR"
    """


    """
    STATE_VM_DEPLOYMENT_RESTARTED = "VM_DEPLOYMENT_RESTARTED"
    """


    """
    STATE_REGISTRATION_FAILED = "REGISTRATION_FAILED"
    """


    """
    STATE_TRANSPORT_NODE_SYNC_PENDING = "TRANSPORT_NODE_SYNC_PENDING"
    """


    """
    STATE_TRANSPORT_NODE_CONFIGURATION_MISSING = "TRANSPORT_NODE_CONFIGURATION_MISSING"
    """


    """
    STATE_EDGE_HARDWARE_NOT_SUPPORTED = "EDGE_HARDWARE_NOT_SUPPORTED"
    """


    """
    STATE_MULTIPLE_OVERLAY_TZS_NOT_SUPPORTED = "MULTIPLE_OVERLAY_TZS_NOT_SUPPORTED"
    """


    """
    STATE_TN_OVERLAY_TZ_IN_USE_BY_EDGE_CLUSTER = "TN_OVERLAY_TZ_IN_USE_BY_EDGE_CLUSTER"
    """


    """
    STATE_TZ_ENDPOINTS_NOT_SPECIFIED = "TZ_ENDPOINTS_NOT_SPECIFIED"
    """


    """
    STATE_NO_PNIC_PREPARED_IN_EDGE = "NO_PNIC_PREPARED_IN_EDGE"
    """


    """
    STATE_APPLIANCE_INTERNAL_ERROR = "APPLIANCE_INTERNAL_ERROR"
    """


    """
    STATE_VTEP_DHCP_NOT_SUPPORTED = "VTEP_DHCP_NOT_SUPPORTED"
    """


    """
    STATE_UNSUPPORTED_HOST_SWITCH_PROFILE = "UNSUPPORTED_HOST_SWITCH_PROFILE"
    """


    """
    STATE_UPLINK_HOST_SWITCH_PROFILE_NOT_SPECIFIED = "UPLINK_HOST_SWITCH_PROFILE_NOT_SPECIFIED"
    """


    """
    STATE_HOSTSWITCH_PROFILE_NOT_FOUND = "HOSTSWITCH_PROFILE_NOT_FOUND"
    """


    """
    STATE_LLDP_SEND_ENABLED_NOT_SUPPORTED = "LLDP_SEND_ENABLED_NOT_SUPPORTED"
    """


    """
    STATE_UNSUPPORTED_NAMED_TEAMING_POLICY = "UNSUPPORTED_NAMED_TEAMING_POLICY"
    """


    """
    STATE_LBSRCID_NOT_SUPPORTED_FOR_EDGE_VM = "LBSRCID_NOT_SUPPORTED_FOR_EDGE_VM"
    """


    """
    STATE_LACP_NOT_SUPPORTED_FOR_EDGE_VM = "LACP_NOT_SUPPORTED_FOR_EDGE_VM"
    """


    """
    STATE_STANDBY_UPLINKS_NOT_SUPPORTED_FOR_EDGE_VM = "STANDBY_UPLINKS_NOT_SUPPORTED_FOR_EDGE_VM"
    """


    """
    STATE_MULTIPLE_ACTIVE_UPLINKS_NOT_SUPPORTED_FOR_EDGE = "MULTIPLE_ACTIVE_UPLINKS_NOT_SUPPORTED_FOR_EDGE"
    """


    """
    STATE_UNSUPPORTED_LACP_LB_ALGO_FOR_NODE = "UNSUPPORTED_LACP_LB_ALGO_FOR_NODE"
    """


    """
    STATE_EDGE_NODE_VERSION_NOT_SUPPORTED = "EDGE_NODE_VERSION_NOT_SUPPORTED"
    """


    """
    STATE_NO_PNIC_SPECIFIED_IN_TN = "NO_PNIC_SPECIFIED_IN_TN"
    """


    """
    STATE_INVALID_PNIC_DEVICE_NAME = "INVALID_PNIC_DEVICE_NAME"
    """


    """
    STATE_TRANSPORT_NODE_READY = "TRANSPORT_NODE_READY"
    """


    """
    STATE_VM_NETWORK_EDIT_PENDING = "VM_NETWORK_EDIT_PENDING"
    """


    """
    STATE_UNSUPPORTED_DEFAULT_TEAMING_POLICY = "UNSUPPORTED_DEFAULT_TEAMING_POLICY"
    """


    """
    STATE_MPA_DISCONNECTED = "MPA_DISCONNECTED"
    """


    """
    STATE_VM_RENAME_PENDING = "VM_RENAME_PENDING"
    """


    """
    STATE_VM_CONFIG_EDIT_PENDING = "VM_CONFIG_EDIT_PENDING"
    """


    """
    STATE_VM_NETWORK_EDIT_FAILED = "VM_NETWORK_EDIT_FAILED"
    """


    """
    STATE_VM_RENAME_FAILED = "VM_RENAME_FAILED"
    """


    """
    STATE_VM_CONFIG_EDIT_FAILED = "VM_CONFIG_EDIT_FAILED"
    """


    """
    STATE_VM_CONFIG_DISCREPANCY = "VM_CONFIG_DISCREPANCY"
    """


    """
    STATE_VM_NODE_REFRESH_FAILED = "VM_NODE_REFRESH_FAILED"
    """


    """
    STATE_VM_PLACEMENT_REFRESH_FAILED = "VM_PLACEMENT_REFRESH_FAILED"
    """


    """
    STATE_REGISTRATION_TIMEDOUT = "REGISTRATION_TIMEDOUT"
    """


    """



    _canonical_to_pep_names = {
                            'details': 'details',
                            'failure_code': 'failure_code',
                            'failure_message': 'failure_message',
                            'state': 'state',
                            }

    def __init__(self,
                 details=None,
                 failure_code=None,
                 failure_message=None,
                 state=None,
                ):
        """
        :type  details: :class:`list` of :class:`ConfigurationStateElement` or ``None``
        :param details: Array of configuration state of various sub systems
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  failure_code: :class:`long` or ``None``
        :param failure_code: Error code format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  failure_message: :class:`str` or ``None``
        :param failure_message: Error message in case of failure
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  state: :class:`str` or ``None``
        :param state: Possible values are: 
            
            * :attr:`DhcpServerState.STATE_PENDING`
            * :attr:`DhcpServerState.STATE_IN_PROGRESS`
            * :attr:`DhcpServerState.STATE_SUCCESS`
            * :attr:`DhcpServerState.STATE_FAILED`
            * :attr:`DhcpServerState.STATE_PARTIAL_SUCCESS`
            * :attr:`DhcpServerState.STATE_ORPHANED`
            * :attr:`DhcpServerState.STATE_UNKNOWN`
            * :attr:`DhcpServerState.STATE_ERROR`
            * :attr:`DhcpServerState.STATE_IN_SYNC`
            * :attr:`DhcpServerState.STATE_NOT_AVAILABLE`
            * :attr:`DhcpServerState.STATE_VM_DEPLOYMENT_QUEUED`
            * :attr:`DhcpServerState.STATE_VM_DEPLOYMENT_IN_PROGRESS`
            * :attr:`DhcpServerState.STATE_VM_DEPLOYMENT_FAILED`
            * :attr:`DhcpServerState.STATE_VM_POWER_ON_IN_PROGRESS`
            * :attr:`DhcpServerState.STATE_VM_POWER_ON_FAILED`
            * :attr:`DhcpServerState.STATE_REGISTRATION_PENDING`
            * :attr:`DhcpServerState.STATE_NODE_NOT_READY`
            * :attr:`DhcpServerState.STATE_NODE_READY`
            * :attr:`DhcpServerState.STATE_VM_POWER_OFF_IN_PROGRESS`
            * :attr:`DhcpServerState.STATE_VM_POWER_OFF_FAILED`
            * :attr:`DhcpServerState.STATE_VM_UNDEPLOY_IN_PROGRESS`
            * :attr:`DhcpServerState.STATE_VM_UNDEPLOY_FAILED`
            * :attr:`DhcpServerState.STATE_VM_UNDEPLOY_SUCCESSFUL`
            * :attr:`DhcpServerState.STATE_EDGE_CONFIG_ERROR`
            * :attr:`DhcpServerState.STATE_VM_DEPLOYMENT_RESTARTED`
            * :attr:`DhcpServerState.STATE_REGISTRATION_FAILED`
            * :attr:`DhcpServerState.STATE_TRANSPORT_NODE_SYNC_PENDING`
            *
              :attr:`DhcpServerState.STATE_TRANSPORT_NODE_CONFIGURATION_MISSING`
            * :attr:`DhcpServerState.STATE_EDGE_HARDWARE_NOT_SUPPORTED`
            * :attr:`DhcpServerState.STATE_MULTIPLE_OVERLAY_TZS_NOT_SUPPORTED`
            *
              :attr:`DhcpServerState.STATE_TN_OVERLAY_TZ_IN_USE_BY_EDGE_CLUSTER`
            * :attr:`DhcpServerState.STATE_TZ_ENDPOINTS_NOT_SPECIFIED`
            * :attr:`DhcpServerState.STATE_NO_PNIC_PREPARED_IN_EDGE`
            * :attr:`DhcpServerState.STATE_APPLIANCE_INTERNAL_ERROR`
            * :attr:`DhcpServerState.STATE_VTEP_DHCP_NOT_SUPPORTED`
            * :attr:`DhcpServerState.STATE_UNSUPPORTED_HOST_SWITCH_PROFILE`
            *
              :attr:`DhcpServerState.STATE_UPLINK_HOST_SWITCH_PROFILE_NOT_SPECIFIED`
            * :attr:`DhcpServerState.STATE_HOSTSWITCH_PROFILE_NOT_FOUND`
            * :attr:`DhcpServerState.STATE_LLDP_SEND_ENABLED_NOT_SUPPORTED`
            * :attr:`DhcpServerState.STATE_UNSUPPORTED_NAMED_TEAMING_POLICY`
            * :attr:`DhcpServerState.STATE_LBSRCID_NOT_SUPPORTED_FOR_EDGE_VM`
            * :attr:`DhcpServerState.STATE_LACP_NOT_SUPPORTED_FOR_EDGE_VM`
            *
              :attr:`DhcpServerState.STATE_STANDBY_UPLINKS_NOT_SUPPORTED_FOR_EDGE_VM`
            *
              :attr:`DhcpServerState.STATE_MULTIPLE_ACTIVE_UPLINKS_NOT_SUPPORTED_FOR_EDGE`
            * :attr:`DhcpServerState.STATE_UNSUPPORTED_LACP_LB_ALGO_FOR_NODE`
            * :attr:`DhcpServerState.STATE_EDGE_NODE_VERSION_NOT_SUPPORTED`
            * :attr:`DhcpServerState.STATE_NO_PNIC_SPECIFIED_IN_TN`
            * :attr:`DhcpServerState.STATE_INVALID_PNIC_DEVICE_NAME`
            * :attr:`DhcpServerState.STATE_TRANSPORT_NODE_READY`
            * :attr:`DhcpServerState.STATE_VM_NETWORK_EDIT_PENDING`
            * :attr:`DhcpServerState.STATE_UNSUPPORTED_DEFAULT_TEAMING_POLICY`
            * :attr:`DhcpServerState.STATE_MPA_DISCONNECTED`
            * :attr:`DhcpServerState.STATE_VM_RENAME_PENDING`
            * :attr:`DhcpServerState.STATE_VM_CONFIG_EDIT_PENDING`
            * :attr:`DhcpServerState.STATE_VM_NETWORK_EDIT_FAILED`
            * :attr:`DhcpServerState.STATE_VM_RENAME_FAILED`
            * :attr:`DhcpServerState.STATE_VM_CONFIG_EDIT_FAILED`
            * :attr:`DhcpServerState.STATE_VM_CONFIG_DISCREPANCY`
            * :attr:`DhcpServerState.STATE_VM_NODE_REFRESH_FAILED`
            * :attr:`DhcpServerState.STATE_VM_PLACEMENT_REFRESH_FAILED`
            * :attr:`DhcpServerState.STATE_REGISTRATION_TIMEDOUT`
            
            Gives details of state of desired configuration. Additional enums
            with more details on progress/success/error states are sent for
            edge node. The success states are NODE_READY and
            TRANSPORT_NODE_READY, pending states are {VM_DEPLOYMENT_QUEUED,
            VM_DEPLOYMENT_IN_PROGRESS, REGISTRATION_PENDING} and other values
            indicate failures. \"in_sync\" state indicates that the desired
            configuration has been received by the host to which it applies,
            but is not yet in effect. When the configuration is actually in
            effect, the state will change to \"success\". Please note, failed
            state is deprecated.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.details = details
        self.failure_code = failure_code
        self.failure_message = failure_message
        self.state = state
        VapiStruct.__init__(self)


DhcpServerState._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.dhcp_server_state', {
        'details': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ConfigurationStateElement'))),
        'failure_code': type.OptionalType(type.IntegerType()),
        'failure_message': type.OptionalType(type.StringType()),
        'state': type.OptionalType(type.StringType()),
    },
    DhcpServerState,
    False,
    None))



class DhcpServerStatistics(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'acks': 'acks',
                            'declines': 'declines',
                            'dhcp_server_id': 'dhcp_server_id',
                            'discovers': 'discovers',
                            'errors': 'errors',
                            'informs': 'informs',
                            'ip_pool_stats': 'ip_pool_stats',
                            'nacks': 'nacks',
                            'offers': 'offers',
                            'releases': 'releases',
                            'requests': 'requests',
                            'timestamp': 'timestamp',
                            }

    def __init__(self,
                 acks=None,
                 declines=None,
                 dhcp_server_id=None,
                 discovers=None,
                 errors=None,
                 informs=None,
                 ip_pool_stats=None,
                 nacks=None,
                 offers=None,
                 releases=None,
                 requests=None,
                 timestamp=None,
                ):
        """
        :type  acks: :class:`long` or ``None``
        :param acks: The total number of DHCP ACK packets format: int64
        :type  declines: :class:`long` or ``None``
        :param declines: The total number of DHCP DECLINE packets format: int64
        :type  dhcp_server_id: :class:`str` or ``None``
        :param dhcp_server_id: dhcp server uuid
        :type  discovers: :class:`long` or ``None``
        :param discovers: The total number of DHCP DISCOVER packets format: int64
        :type  errors: :class:`long` or ``None``
        :param errors: The total number of DHCP errors format: int64
        :type  informs: :class:`long` or ``None``
        :param informs: The total number of DHCP INFORM packets format: int64
        :type  ip_pool_stats: :class:`list` of :class:`DhcpIpPoolUsage` or ``None``
        :param ip_pool_stats: The DHCP ip pool usage statistics
        :type  nacks: :class:`long` or ``None``
        :param nacks: The total number of DHCP NACK packets format: int64
        :type  offers: :class:`long` or ``None``
        :param offers: The total number of DHCP OFFER packets format: int64
        :type  releases: :class:`long` or ``None``
        :param releases: The total number of DHCP RELEASE packets format: int64
        :type  requests: :class:`long` or ``None``
        :param requests: The total number of DHCP REQUEST packets format: int64
        :type  timestamp: :class:`long` or ``None``
        :param timestamp: timestamp of the statistics format: int64
        """
        self.acks = acks
        self.declines = declines
        self.dhcp_server_id = dhcp_server_id
        self.discovers = discovers
        self.errors = errors
        self.informs = informs
        self.ip_pool_stats = ip_pool_stats
        self.nacks = nacks
        self.offers = offers
        self.releases = releases
        self.requests = requests
        self.timestamp = timestamp
        VapiStruct.__init__(self)


DhcpServerStatistics._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.dhcp_server_statistics', {
        'acks': type.OptionalType(type.IntegerType()),
        'declines': type.OptionalType(type.IntegerType()),
        'dhcp_server_id': type.OptionalType(type.StringType()),
        'discovers': type.OptionalType(type.IntegerType()),
        'errors': type.OptionalType(type.IntegerType()),
        'informs': type.OptionalType(type.IntegerType()),
        'ip_pool_stats': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'DhcpIpPoolUsage'))),
        'nacks': type.OptionalType(type.IntegerType()),
        'offers': type.OptionalType(type.IntegerType()),
        'releases': type.OptionalType(type.IntegerType()),
        'requests': type.OptionalType(type.IntegerType()),
        'timestamp': type.OptionalType(type.IntegerType()),
    },
    DhcpServerStatistics,
    False,
    None))



class DhcpServerStatus(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    SERVICE_STATUS_UP = "UP"
    """


    """
    SERVICE_STATUS_DOWN = "DOWN"
    """


    """
    SERVICE_STATUS_ERROR = "ERROR"
    """


    """
    SERVICE_STATUS_NO_STANDBY = "NO_STANDBY"
    """


    """



    _canonical_to_pep_names = {
                            'active_node': 'active_node',
                            'error_message': 'error_message',
                            'service_status': 'service_status',
                            'stand_by_node': 'stand_by_node',
                            }

    def __init__(self,
                 active_node=None,
                 error_message=None,
                 service_status=None,
                 stand_by_node=None,
                ):
        """
        :type  active_node: :class:`str` or ``None``
        :param active_node: uuid of active transport node
        :type  error_message: :class:`str` or ``None``
        :param error_message: Error message, if available
        :type  service_status: :class:`str` or ``None``
        :param service_status: Possible values are: 
            
            * :attr:`DhcpServerStatus.SERVICE_STATUS_UP`
            * :attr:`DhcpServerStatus.SERVICE_STATUS_DOWN`
            * :attr:`DhcpServerStatus.SERVICE_STATUS_ERROR`
            * :attr:`DhcpServerStatus.SERVICE_STATUS_NO_STANDBY`
            
            UP means the dhcp service is working fine on both active
            transport-node and stand-by transport-node (if have), hence
            fail-over can work at this time if there is failure happens on one
            of the transport-node; DOWN means the dhcp service is down on both
            active transport-node and stand-by node (if have), hence the
            dhcp-service will not repsonse any dhcp request; Error means error
            happens on transport-node(s) or no status is reported from
            transport-node(s). The dhcp service may be working (or not
            working); NO_STANDBY means dhcp service is working in one of the
            transport node while not in the other transport-node (if have).
            Hence if the dhcp service in the working transport-node is down,
            fail-over will not happen and the dhcp service will go down.
        :type  stand_by_node: :class:`str` or ``None``
        :param stand_by_node: uuid of stand_by transport node. null if non-HA mode
        """
        self.active_node = active_node
        self.error_message = error_message
        self.service_status = service_status
        self.stand_by_node = stand_by_node
        VapiStruct.__init__(self)


DhcpServerStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.dhcp_server_status', {
        'active_node': type.OptionalType(type.StringType()),
        'error_message': type.OptionalType(type.StringType()),
        'service_status': type.OptionalType(type.StringType()),
        'stand_by_node': type.OptionalType(type.StringType()),
    },
    DhcpServerStatus,
    False,
    None))



class DhcpStaticBindingConfig(VapiStruct):
    """
    DHCP IPv4 and IPv6 static bindings are extended from this abstract class.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "DhcpStaticBindingConfig"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    RESOURCE_TYPE_DHCPV4STATICBINDINGCONFIG = "DhcpV4StaticBindingConfig"
    """


    """
    RESOURCE_TYPE_DHCPV6STATICBINDINGCONFIG = "DhcpV6StaticBindingConfig"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='DhcpStaticBindingConfig',
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`DhcpStaticBindingConfig.RESOURCE_TYPE_DHCPV4STATICBINDINGCONFIG`
            *
              :attr:`DhcpStaticBindingConfig.RESOURCE_TYPE_DHCPV6STATICBINDINGCONFIG`
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

DhcpStaticBindingConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.dhcp_static_binding_config', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
    },
    DhcpStaticBindingConfig,
    False,
    None))



class DhcpStaticBindingConfigListResult(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param results: Paginated list of DhcpStaticBindingConfig
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`DhcpStaticBindingConfig`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`DhcpStaticBindingConfig`.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


DhcpStaticBindingConfigListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.dhcp_static_binding_config_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'DhcpStaticBindingConfig')]))),
    },
    DhcpStaticBindingConfigListResult,
    False,
    None))



class DhcpStaticBindingState(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    STATE_PENDING = "pending"
    """


    """
    STATE_IN_PROGRESS = "in_progress"
    """


    """
    STATE_SUCCESS = "success"
    """


    """
    STATE_FAILED = "failed"
    """


    """
    STATE_PARTIAL_SUCCESS = "partial_success"
    """


    """
    STATE_ORPHANED = "orphaned"
    """


    """
    STATE_UNKNOWN = "unknown"
    """


    """
    STATE_ERROR = "error"
    """


    """
    STATE_IN_SYNC = "in_sync"
    """


    """
    STATE_NOT_AVAILABLE = "NOT_AVAILABLE"
    """


    """
    STATE_VM_DEPLOYMENT_QUEUED = "VM_DEPLOYMENT_QUEUED"
    """


    """
    STATE_VM_DEPLOYMENT_IN_PROGRESS = "VM_DEPLOYMENT_IN_PROGRESS"
    """


    """
    STATE_VM_DEPLOYMENT_FAILED = "VM_DEPLOYMENT_FAILED"
    """


    """
    STATE_VM_POWER_ON_IN_PROGRESS = "VM_POWER_ON_IN_PROGRESS"
    """


    """
    STATE_VM_POWER_ON_FAILED = "VM_POWER_ON_FAILED"
    """


    """
    STATE_REGISTRATION_PENDING = "REGISTRATION_PENDING"
    """


    """
    STATE_NODE_NOT_READY = "NODE_NOT_READY"
    """


    """
    STATE_NODE_READY = "NODE_READY"
    """


    """
    STATE_VM_POWER_OFF_IN_PROGRESS = "VM_POWER_OFF_IN_PROGRESS"
    """


    """
    STATE_VM_POWER_OFF_FAILED = "VM_POWER_OFF_FAILED"
    """


    """
    STATE_VM_UNDEPLOY_IN_PROGRESS = "VM_UNDEPLOY_IN_PROGRESS"
    """


    """
    STATE_VM_UNDEPLOY_FAILED = "VM_UNDEPLOY_FAILED"
    """


    """
    STATE_VM_UNDEPLOY_SUCCESSFUL = "VM_UNDEPLOY_SUCCESSFUL"
    """


    """
    STATE_EDGE_CONFIG_ERROR = "EDGE_CONFIG_ERROR"
    """


    """
    STATE_VM_DEPLOYMENT_RESTARTED = "VM_DEPLOYMENT_RESTARTED"
    """


    """
    STATE_REGISTRATION_FAILED = "REGISTRATION_FAILED"
    """


    """
    STATE_TRANSPORT_NODE_SYNC_PENDING = "TRANSPORT_NODE_SYNC_PENDING"
    """


    """
    STATE_TRANSPORT_NODE_CONFIGURATION_MISSING = "TRANSPORT_NODE_CONFIGURATION_MISSING"
    """


    """
    STATE_EDGE_HARDWARE_NOT_SUPPORTED = "EDGE_HARDWARE_NOT_SUPPORTED"
    """


    """
    STATE_MULTIPLE_OVERLAY_TZS_NOT_SUPPORTED = "MULTIPLE_OVERLAY_TZS_NOT_SUPPORTED"
    """


    """
    STATE_TN_OVERLAY_TZ_IN_USE_BY_EDGE_CLUSTER = "TN_OVERLAY_TZ_IN_USE_BY_EDGE_CLUSTER"
    """


    """
    STATE_TZ_ENDPOINTS_NOT_SPECIFIED = "TZ_ENDPOINTS_NOT_SPECIFIED"
    """


    """
    STATE_NO_PNIC_PREPARED_IN_EDGE = "NO_PNIC_PREPARED_IN_EDGE"
    """


    """
    STATE_APPLIANCE_INTERNAL_ERROR = "APPLIANCE_INTERNAL_ERROR"
    """


    """
    STATE_VTEP_DHCP_NOT_SUPPORTED = "VTEP_DHCP_NOT_SUPPORTED"
    """


    """
    STATE_UNSUPPORTED_HOST_SWITCH_PROFILE = "UNSUPPORTED_HOST_SWITCH_PROFILE"
    """


    """
    STATE_UPLINK_HOST_SWITCH_PROFILE_NOT_SPECIFIED = "UPLINK_HOST_SWITCH_PROFILE_NOT_SPECIFIED"
    """


    """
    STATE_HOSTSWITCH_PROFILE_NOT_FOUND = "HOSTSWITCH_PROFILE_NOT_FOUND"
    """


    """
    STATE_LLDP_SEND_ENABLED_NOT_SUPPORTED = "LLDP_SEND_ENABLED_NOT_SUPPORTED"
    """


    """
    STATE_UNSUPPORTED_NAMED_TEAMING_POLICY = "UNSUPPORTED_NAMED_TEAMING_POLICY"
    """


    """
    STATE_LBSRCID_NOT_SUPPORTED_FOR_EDGE_VM = "LBSRCID_NOT_SUPPORTED_FOR_EDGE_VM"
    """


    """
    STATE_LACP_NOT_SUPPORTED_FOR_EDGE_VM = "LACP_NOT_SUPPORTED_FOR_EDGE_VM"
    """


    """
    STATE_STANDBY_UPLINKS_NOT_SUPPORTED_FOR_EDGE_VM = "STANDBY_UPLINKS_NOT_SUPPORTED_FOR_EDGE_VM"
    """


    """
    STATE_MULTIPLE_ACTIVE_UPLINKS_NOT_SUPPORTED_FOR_EDGE = "MULTIPLE_ACTIVE_UPLINKS_NOT_SUPPORTED_FOR_EDGE"
    """


    """
    STATE_UNSUPPORTED_LACP_LB_ALGO_FOR_NODE = "UNSUPPORTED_LACP_LB_ALGO_FOR_NODE"
    """


    """
    STATE_EDGE_NODE_VERSION_NOT_SUPPORTED = "EDGE_NODE_VERSION_NOT_SUPPORTED"
    """


    """
    STATE_NO_PNIC_SPECIFIED_IN_TN = "NO_PNIC_SPECIFIED_IN_TN"
    """


    """
    STATE_INVALID_PNIC_DEVICE_NAME = "INVALID_PNIC_DEVICE_NAME"
    """


    """
    STATE_TRANSPORT_NODE_READY = "TRANSPORT_NODE_READY"
    """


    """
    STATE_VM_NETWORK_EDIT_PENDING = "VM_NETWORK_EDIT_PENDING"
    """


    """
    STATE_UNSUPPORTED_DEFAULT_TEAMING_POLICY = "UNSUPPORTED_DEFAULT_TEAMING_POLICY"
    """


    """
    STATE_MPA_DISCONNECTED = "MPA_DISCONNECTED"
    """


    """
    STATE_VM_RENAME_PENDING = "VM_RENAME_PENDING"
    """


    """
    STATE_VM_CONFIG_EDIT_PENDING = "VM_CONFIG_EDIT_PENDING"
    """


    """
    STATE_VM_NETWORK_EDIT_FAILED = "VM_NETWORK_EDIT_FAILED"
    """


    """
    STATE_VM_RENAME_FAILED = "VM_RENAME_FAILED"
    """


    """
    STATE_VM_CONFIG_EDIT_FAILED = "VM_CONFIG_EDIT_FAILED"
    """


    """
    STATE_VM_CONFIG_DISCREPANCY = "VM_CONFIG_DISCREPANCY"
    """


    """
    STATE_VM_NODE_REFRESH_FAILED = "VM_NODE_REFRESH_FAILED"
    """


    """
    STATE_VM_PLACEMENT_REFRESH_FAILED = "VM_PLACEMENT_REFRESH_FAILED"
    """


    """
    STATE_REGISTRATION_TIMEDOUT = "REGISTRATION_TIMEDOUT"
    """


    """



    _canonical_to_pep_names = {
                            'details': 'details',
                            'failure_code': 'failure_code',
                            'failure_message': 'failure_message',
                            'state': 'state',
                            }

    def __init__(self,
                 details=None,
                 failure_code=None,
                 failure_message=None,
                 state=None,
                ):
        """
        :type  details: :class:`list` of :class:`ConfigurationStateElement` or ``None``
        :param details: Array of configuration state of various sub systems
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  failure_code: :class:`long` or ``None``
        :param failure_code: Error code format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  failure_message: :class:`str` or ``None``
        :param failure_message: Error message in case of failure
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  state: :class:`str` or ``None``
        :param state: Possible values are: 
            
            * :attr:`DhcpStaticBindingState.STATE_PENDING`
            * :attr:`DhcpStaticBindingState.STATE_IN_PROGRESS`
            * :attr:`DhcpStaticBindingState.STATE_SUCCESS`
            * :attr:`DhcpStaticBindingState.STATE_FAILED`
            * :attr:`DhcpStaticBindingState.STATE_PARTIAL_SUCCESS`
            * :attr:`DhcpStaticBindingState.STATE_ORPHANED`
            * :attr:`DhcpStaticBindingState.STATE_UNKNOWN`
            * :attr:`DhcpStaticBindingState.STATE_ERROR`
            * :attr:`DhcpStaticBindingState.STATE_IN_SYNC`
            * :attr:`DhcpStaticBindingState.STATE_NOT_AVAILABLE`
            * :attr:`DhcpStaticBindingState.STATE_VM_DEPLOYMENT_QUEUED`
            * :attr:`DhcpStaticBindingState.STATE_VM_DEPLOYMENT_IN_PROGRESS`
            * :attr:`DhcpStaticBindingState.STATE_VM_DEPLOYMENT_FAILED`
            * :attr:`DhcpStaticBindingState.STATE_VM_POWER_ON_IN_PROGRESS`
            * :attr:`DhcpStaticBindingState.STATE_VM_POWER_ON_FAILED`
            * :attr:`DhcpStaticBindingState.STATE_REGISTRATION_PENDING`
            * :attr:`DhcpStaticBindingState.STATE_NODE_NOT_READY`
            * :attr:`DhcpStaticBindingState.STATE_NODE_READY`
            * :attr:`DhcpStaticBindingState.STATE_VM_POWER_OFF_IN_PROGRESS`
            * :attr:`DhcpStaticBindingState.STATE_VM_POWER_OFF_FAILED`
            * :attr:`DhcpStaticBindingState.STATE_VM_UNDEPLOY_IN_PROGRESS`
            * :attr:`DhcpStaticBindingState.STATE_VM_UNDEPLOY_FAILED`
            * :attr:`DhcpStaticBindingState.STATE_VM_UNDEPLOY_SUCCESSFUL`
            * :attr:`DhcpStaticBindingState.STATE_EDGE_CONFIG_ERROR`
            * :attr:`DhcpStaticBindingState.STATE_VM_DEPLOYMENT_RESTARTED`
            * :attr:`DhcpStaticBindingState.STATE_REGISTRATION_FAILED`
            * :attr:`DhcpStaticBindingState.STATE_TRANSPORT_NODE_SYNC_PENDING`
            *
              :attr:`DhcpStaticBindingState.STATE_TRANSPORT_NODE_CONFIGURATION_MISSING`
            * :attr:`DhcpStaticBindingState.STATE_EDGE_HARDWARE_NOT_SUPPORTED`
            *
              :attr:`DhcpStaticBindingState.STATE_MULTIPLE_OVERLAY_TZS_NOT_SUPPORTED`
            *
              :attr:`DhcpStaticBindingState.STATE_TN_OVERLAY_TZ_IN_USE_BY_EDGE_CLUSTER`
            * :attr:`DhcpStaticBindingState.STATE_TZ_ENDPOINTS_NOT_SPECIFIED`
            * :attr:`DhcpStaticBindingState.STATE_NO_PNIC_PREPARED_IN_EDGE`
            * :attr:`DhcpStaticBindingState.STATE_APPLIANCE_INTERNAL_ERROR`
            * :attr:`DhcpStaticBindingState.STATE_VTEP_DHCP_NOT_SUPPORTED`
            *
              :attr:`DhcpStaticBindingState.STATE_UNSUPPORTED_HOST_SWITCH_PROFILE`
            *
              :attr:`DhcpStaticBindingState.STATE_UPLINK_HOST_SWITCH_PROFILE_NOT_SPECIFIED`
            * :attr:`DhcpStaticBindingState.STATE_HOSTSWITCH_PROFILE_NOT_FOUND`
            *
              :attr:`DhcpStaticBindingState.STATE_LLDP_SEND_ENABLED_NOT_SUPPORTED`
            *
              :attr:`DhcpStaticBindingState.STATE_UNSUPPORTED_NAMED_TEAMING_POLICY`
            *
              :attr:`DhcpStaticBindingState.STATE_LBSRCID_NOT_SUPPORTED_FOR_EDGE_VM`
            *
              :attr:`DhcpStaticBindingState.STATE_LACP_NOT_SUPPORTED_FOR_EDGE_VM`
            *
              :attr:`DhcpStaticBindingState.STATE_STANDBY_UPLINKS_NOT_SUPPORTED_FOR_EDGE_VM`
            *
              :attr:`DhcpStaticBindingState.STATE_MULTIPLE_ACTIVE_UPLINKS_NOT_SUPPORTED_FOR_EDGE`
            *
              :attr:`DhcpStaticBindingState.STATE_UNSUPPORTED_LACP_LB_ALGO_FOR_NODE`
            *
              :attr:`DhcpStaticBindingState.STATE_EDGE_NODE_VERSION_NOT_SUPPORTED`
            * :attr:`DhcpStaticBindingState.STATE_NO_PNIC_SPECIFIED_IN_TN`
            * :attr:`DhcpStaticBindingState.STATE_INVALID_PNIC_DEVICE_NAME`
            * :attr:`DhcpStaticBindingState.STATE_TRANSPORT_NODE_READY`
            * :attr:`DhcpStaticBindingState.STATE_VM_NETWORK_EDIT_PENDING`
            *
              :attr:`DhcpStaticBindingState.STATE_UNSUPPORTED_DEFAULT_TEAMING_POLICY`
            * :attr:`DhcpStaticBindingState.STATE_MPA_DISCONNECTED`
            * :attr:`DhcpStaticBindingState.STATE_VM_RENAME_PENDING`
            * :attr:`DhcpStaticBindingState.STATE_VM_CONFIG_EDIT_PENDING`
            * :attr:`DhcpStaticBindingState.STATE_VM_NETWORK_EDIT_FAILED`
            * :attr:`DhcpStaticBindingState.STATE_VM_RENAME_FAILED`
            * :attr:`DhcpStaticBindingState.STATE_VM_CONFIG_EDIT_FAILED`
            * :attr:`DhcpStaticBindingState.STATE_VM_CONFIG_DISCREPANCY`
            * :attr:`DhcpStaticBindingState.STATE_VM_NODE_REFRESH_FAILED`
            * :attr:`DhcpStaticBindingState.STATE_VM_PLACEMENT_REFRESH_FAILED`
            * :attr:`DhcpStaticBindingState.STATE_REGISTRATION_TIMEDOUT`
            
            Gives details of state of desired configuration. Additional enums
            with more details on progress/success/error states are sent for
            edge node. The success states are NODE_READY and
            TRANSPORT_NODE_READY, pending states are {VM_DEPLOYMENT_QUEUED,
            VM_DEPLOYMENT_IN_PROGRESS, REGISTRATION_PENDING} and other values
            indicate failures. \"in_sync\" state indicates that the desired
            configuration has been received by the host to which it applies,
            but is not yet in effect. When the configuration is actually in
            effect, the state will change to \"success\". Please note, failed
            state is deprecated.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.details = details
        self.failure_code = failure_code
        self.failure_message = failure_message
        self.state = state
        VapiStruct.__init__(self)


DhcpStaticBindingState._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.dhcp_static_binding_state', {
        'details': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ConfigurationStateElement'))),
        'failure_code': type.OptionalType(type.IntegerType()),
        'failure_message': type.OptionalType(type.StringType()),
        'state': type.OptionalType(type.StringType()),
    },
    DhcpStaticBindingState,
    False,
    None))



class DhcpStatistics(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'acks': 'acks',
                            'declines': 'declines',
                            'dhcp_server_id': 'dhcp_server_id',
                            'discovers': 'discovers',
                            'errors': 'errors',
                            'informs': 'informs',
                            'ip_pool_stats': 'ip_pool_stats',
                            'nacks': 'nacks',
                            'offers': 'offers',
                            'releases': 'releases',
                            'requests': 'requests',
                            'timestamp': 'timestamp',
                            }

    def __init__(self,
                 acks=None,
                 declines=None,
                 dhcp_server_id=None,
                 discovers=None,
                 errors=None,
                 informs=None,
                 ip_pool_stats=None,
                 nacks=None,
                 offers=None,
                 releases=None,
                 requests=None,
                 timestamp=None,
                ):
        """
        :type  acks: :class:`long` or ``None``
        :param acks: The total number of DHCP ACK packets format: int64
        :type  declines: :class:`long` or ``None``
        :param declines: The total number of DHCP DECLINE packets format: int64
        :type  dhcp_server_id: :class:`str` or ``None``
        :param dhcp_server_id: dhcp server uuid
        :type  discovers: :class:`long` or ``None``
        :param discovers: The total number of DHCP DISCOVER packets format: int64
        :type  errors: :class:`long` or ``None``
        :param errors: The total number of DHCP errors format: int64
        :type  informs: :class:`long` or ``None``
        :param informs: The total number of DHCP INFORM packets format: int64
        :type  ip_pool_stats: :class:`list` of :class:`DhcpIpPoolUsage` or ``None``
        :param ip_pool_stats: The DHCP ip pool usage statistics
        :type  nacks: :class:`long` or ``None``
        :param nacks: The total number of DHCP NACK packets format: int64
        :type  offers: :class:`long` or ``None``
        :param offers: The total number of DHCP OFFER packets format: int64
        :type  releases: :class:`long` or ``None``
        :param releases: The total number of DHCP RELEASE packets format: int64
        :type  requests: :class:`long` or ``None``
        :param requests: The total number of DHCP REQUEST packets format: int64
        :type  timestamp: :class:`long` or ``None``
        :param timestamp: timestamp of the statistics format: int64
        """
        self.acks = acks
        self.declines = declines
        self.dhcp_server_id = dhcp_server_id
        self.discovers = discovers
        self.errors = errors
        self.informs = informs
        self.ip_pool_stats = ip_pool_stats
        self.nacks = nacks
        self.offers = offers
        self.releases = releases
        self.requests = requests
        self.timestamp = timestamp
        VapiStruct.__init__(self)


DhcpStatistics._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.dhcp_statistics', {
        'acks': type.OptionalType(type.IntegerType()),
        'declines': type.OptionalType(type.IntegerType()),
        'dhcp_server_id': type.OptionalType(type.StringType()),
        'discovers': type.OptionalType(type.IntegerType()),
        'errors': type.OptionalType(type.IntegerType()),
        'informs': type.OptionalType(type.IntegerType()),
        'ip_pool_stats': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'DhcpIpPoolUsage'))),
        'nacks': type.OptionalType(type.IntegerType()),
        'offers': type.OptionalType(type.IntegerType()),
        'releases': type.OptionalType(type.IntegerType()),
        'requests': type.OptionalType(type.IntegerType()),
        'timestamp': type.OptionalType(type.IntegerType()),
    },
    DhcpStatistics,
    False,
    None))



class DhcpV4Options(VapiStruct):
    """
    DHCP options for IPv4 server.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'option121': 'option121',
                            'others': 'others',
                            }

    def __init__(self,
                 option121=None,
                 others=None,
                ):
        """
        :type  option121: :class:`DhcpOption121` or ``None``
        :param option121: DHCP option 121 to define classless static routes.
        :type  others: :class:`list` of :class:`GenericDhcpOption` or ``None``
        :param others: To define DHCP options other than option 121 in generic format.
            Please note, only the following options can be defined in generic
            format. Those other options will be accepted without validation but
            will not take effect. -------------------------- Code Name
            -------------------------- 2 Time Offset 6 Domain Name Server 13
            Boot File Size 19 Forward On/Off 26 MTU Interface 28 Broadcast
            Address 35 ARP Timeout 40 NIS Domain 41 NIS Servers 42 NTP Servers
            44 NETBIOS Name Srv 45 NETBIOS Dist Srv 46 NETBIOS Node Type 47
            NETBIOS Scope 58 Renewal Time 59 Rebinding Time 64 NIS+-Domain-Name
            65 NIS+-Server-Addr 66 TFTP Server-Name (used by PXE) 67
            Bootfile-Name (used by PXE) 93 PXE: Client system architecture 94
            PXE: Client NDI 97 PXE: UUID/UNDI 117 Name Service Search 119
            Domain Search 150 TFTP server address (used by PXE) 175 Etherboot
            209 PXE Configuration File 210 PXE Path Prefix 211 PXE Reboot Time
        """
        self.option121 = option121
        self.others = others
        VapiStruct.__init__(self)


DhcpV4Options._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.dhcp_v4_options', {
        'option121': type.OptionalType(type.ReferenceType(__name__, 'DhcpOption121')),
        'others': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'GenericDhcpOption'))),
    },
    DhcpV4Options,
    False,
    None))



class DhcpV4StaticBindingConfig(VapiStruct):
    """
    DHCP IPv4 static bindings are configured for each segment.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "DhcpV4StaticBindingConfig"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'gateway_address': 'gateway_address',
                            'host_name': 'host_name',
                            'ip_address': 'ip_address',
                            'lease_time': 'lease_time',
                            'mac_address': 'mac_address',
                            'options': 'options',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            }

    def __init__(self,
                 gateway_address=None,
                 host_name=None,
                 ip_address=None,
                 lease_time=None,
                 mac_address=None,
                 options=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='DhcpV4StaticBindingConfig',
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                ):
        """
        :type  gateway_address: :class:`str` or ``None``
        :param gateway_address: When not specified, gateway address is auto-assigned from segment
            configuration. format: ipv4
        :type  host_name: :class:`str` or ``None``
        :param host_name: Hostname to assign to the host.
        :type  ip_address: :class:`str` or ``None``
        :param ip_address: IP assigned to host. The IP address must belong to the subnet, if
            any, configured on Segment. format: ipv4
        :type  lease_time: :class:`long` or ``None``
        :param lease_time: DHCP lease time in seconds. format: int64
        :type  mac_address: :class:`str` or ``None``
        :param mac_address: MAC address of the host. format: mac-address
        :type  options: :class:`DhcpV4Options` or ``None``
        :param options: IPv4 DHCP options.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`DhcpStaticBindingConfig.RESOURCE_TYPE_DHCPV4STATICBINDINGCONFIG`
            *
              :attr:`DhcpStaticBindingConfig.RESOURCE_TYPE_DHCPV6STATICBINDINGCONFIG`
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.gateway_address = gateway_address
        self.host_name = host_name
        self.ip_address = ip_address
        self.lease_time = lease_time
        self.mac_address = mac_address
        self.options = options
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

DhcpV4StaticBindingConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.dhcp_v4_static_binding_config', {
        'gateway_address': type.OptionalType(type.StringType()),
        'host_name': type.OptionalType(type.StringType()),
        'ip_address': type.OptionalType(type.StringType()),
        'lease_time': type.OptionalType(type.IntegerType()),
        'mac_address': type.OptionalType(type.StringType()),
        'options': type.OptionalType(type.ReferenceType(__name__, 'DhcpV4Options')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
    },
    DhcpV4StaticBindingConfig,
    False,
    None))



class DhcpV6StaticBindingConfig(VapiStruct):
    """
    DHCP IPv6 static bindings are configured for each segment.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "DhcpV6StaticBindingConfig"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'dns_nameservers': 'dns_nameservers',
                            'domain_names': 'domain_names',
                            'ip_addresses': 'ip_addresses',
                            'lease_time': 'lease_time',
                            'mac_address': 'mac_address',
                            'preferred_time': 'preferred_time',
                            'sntp_servers': 'sntp_servers',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            }

    def __init__(self,
                 dns_nameservers=None,
                 domain_names=None,
                 ip_addresses=None,
                 lease_time=None,
                 mac_address=None,
                 preferred_time=None,
                 sntp_servers=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='DhcpV6StaticBindingConfig',
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                ):
        """
        :type  dns_nameservers: :class:`list` of :class:`str` or ``None``
        :param dns_nameservers: When not specified, no DNS nameserver will be set to client host.
        :type  domain_names: :class:`list` of :class:`str` or ``None``
        :param domain_names: When not specified, no domain name will be assigned to client host.
        :type  ip_addresses: :class:`list` of :class:`str` or ``None``
        :param ip_addresses: When not specified, no ip address will be assigned to client host.
            format: ipv6
        :type  lease_time: :class:`long` or ``None``
        :param lease_time: Lease time, in seconds. format: int64
        :type  mac_address: :class:`str` or ``None``
        :param mac_address: The MAC address of the client host. Either client-duid or
            mac-address, but not both. format: mac-address
        :type  preferred_time: :class:`long` or ``None``
        :param preferred_time: Preferred time, in seconds. If this value is not provided, the
            value of lease_time\*0.8 will be used. format: int64
        :type  sntp_servers: :class:`list` of :class:`str` or ``None``
        :param sntp_servers: SNTP server IP addresses. format: ipv6
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`DhcpStaticBindingConfig.RESOURCE_TYPE_DHCPV4STATICBINDINGCONFIG`
            *
              :attr:`DhcpStaticBindingConfig.RESOURCE_TYPE_DHCPV6STATICBINDINGCONFIG`
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.dns_nameservers = dns_nameservers
        self.domain_names = domain_names
        self.ip_addresses = ip_addresses
        self.lease_time = lease_time
        self.mac_address = mac_address
        self.preferred_time = preferred_time
        self.sntp_servers = sntp_servers
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

DhcpV6StaticBindingConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.dhcp_v6_static_binding_config', {
        'dns_nameservers': type.OptionalType(type.ListType(type.StringType())),
        'domain_names': type.OptionalType(type.ListType(type.StringType())),
        'ip_addresses': type.OptionalType(type.ListType(type.StringType())),
        'lease_time': type.OptionalType(type.IntegerType()),
        'mac_address': type.OptionalType(type.StringType()),
        'preferred_time': type.OptionalType(type.IntegerType()),
        'sntp_servers': type.OptionalType(type.ListType(type.StringType())),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
    },
    DhcpV6StaticBindingConfig,
    False,
    None))



class Dhcpv6Header(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    MSG_TYPE_SOLICIT = "SOLICIT"
    """


    """
    MSG_TYPE_ADVERTISE = "ADVERTISE"
    """


    """
    MSG_TYPE_REQUEST = "REQUEST"
    """


    """
    MSG_TYPE_REPLY = "REPLY"
    """


    """



    _canonical_to_pep_names = {
                            'msg_type': 'msg_type',
                            }

    def __init__(self,
                 msg_type=None,
                ):
        """
        :type  msg_type: :class:`str` or ``None``
        :param msg_type: Possible values are: 
            
            * :attr:`Dhcpv6Header.MSG_TYPE_SOLICIT`
            * :attr:`Dhcpv6Header.MSG_TYPE_ADVERTISE`
            * :attr:`Dhcpv6Header.MSG_TYPE_REQUEST`
            * :attr:`Dhcpv6Header.MSG_TYPE_REPLY`
            
            This is used to specify the DHCP v6 message. To request the
            assignment of one or more IPv6 addresses, a client first locates a
            DHCP server and then requests the assignment of addresses and other
            configuration information from the server. The client sends a
            Solicit message to the All_DHCP_Relay_Agents_and_Servers address to
            find available DHCP servers. Any server that can meet the client's
            requirements responds with an Advertise message. The client then
            chooses one of the servers and sends a Request message to the
            server asking for confirmed assignment of addresses and other
            configuration information. The server responds with a Reply message
            that contains the confirmed addresses and configuration. SOLICIT -
            A client sends a Solicit message to locate servers. ADVERTISE - A
            server sends and Advertise message to indicate that it is
            available. REQUEST - A client sends a Request message to request
            configuration parameters. REPLY - A server sends a Reply message
            containing assigned addresses and configuration parameters.
        """
        self.msg_type = msg_type
        VapiStruct.__init__(self)


Dhcpv6Header._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.dhcpv6_header', {
        'msg_type': type.OptionalType(type.StringType()),
    },
    Dhcpv6Header,
    False,
    None))



class DiscoveredNode(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "DiscoveredNode"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'certificate': 'certificate',
                            'cm_local_id': 'cm_local_id',
                            'external_id': 'external_id',
                            'hardware_id': 'hardware_id',
                            'ip_addresses': 'ip_addresses',
                            'node_type': 'node_type',
                            'origin_id': 'origin_id',
                            'origin_properties': 'origin_properties',
                            'os_type': 'os_type',
                            'os_version': 'os_version',
                            'parent_compute_collection': 'parent_compute_collection',
                            'stateless': 'stateless',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_last_sync_time': 'last_sync_time',
                            'description': 'description',
                            'display_name': 'display_name',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            }

    def __init__(self,
                 certificate=None,
                 cm_local_id=None,
                 external_id=None,
                 hardware_id=None,
                 ip_addresses=None,
                 node_type=None,
                 origin_id=None,
                 origin_properties=None,
                 os_type=None,
                 os_version=None,
                 parent_compute_collection=None,
                 stateless=None,
                 links=None,
                 schema=None,
                 self_=None,
                 last_sync_time=None,
                 description=None,
                 display_name=None,
                 resource_type='DiscoveredNode',
                 tags=None,
                ):
        """
        :type  certificate: :class:`str` or ``None``
        :param certificate: Certificate of the discovered node
        :type  cm_local_id: :class:`str` or ``None``
        :param cm_local_id: Local Id of the discovered node in the Compute Manager
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  external_id: :class:`str` or ``None``
        :param external_id: External id of the discovered node, ex. a mo-ref from VC
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  hardware_id: :class:`str` or ``None``
        :param hardware_id: Hardware Id is generated using system hardware info. It is used to
            retrieve fabric node of the esx.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  ip_addresses: :class:`list` of :class:`str` or ``None``
        :param ip_addresses: IP Addresses of the the discovered node. format: ip
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  node_type: :class:`str` or ``None``
        :param node_type: Discovered Node type like Host
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  origin_id: :class:`str` or ``None``
        :param origin_id: Id of the compute manager from where this node was discovered
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  origin_properties: :class:`list` of :class:`KeyValuePair` or ``None``
        :param origin_properties: Key-Value map of additional specific properties of discovered node
            in the Compute Manager
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  os_type: :class:`str` or ``None``
        :param os_type: OS type of the discovered node
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  os_version: :class:`str` or ``None``
        :param os_version: OS version of the discovered node
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  parent_compute_collection: :class:`str` or ``None``
        :param parent_compute_collection: External id of the compute collection to which this node belongs
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  stateless: :class:`bool` or ``None``
        :param stateless: The stateless property describes whether host persists its state
            across reboot or not. If state persists, value is set as false
            otherwise true.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  last_sync_time: :class:`long` or ``None``
        :param last_sync_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  resource_type: :class:`str`
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        """
        self.certificate = certificate
        self.cm_local_id = cm_local_id
        self.external_id = external_id
        self.hardware_id = hardware_id
        self.ip_addresses = ip_addresses
        self.node_type = node_type
        self.origin_id = origin_id
        self.origin_properties = origin_properties
        self.os_type = os_type
        self.os_version = os_version
        self.parent_compute_collection = parent_compute_collection
        self.stateless = stateless
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.last_sync_time = last_sync_time
        self.description = description
        self.display_name = display_name
        self._resource_type = resource_type
        self.tags = tags
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

DiscoveredNode._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.discovered_node', {
        'certificate': type.OptionalType(type.StringType()),
        'cm_local_id': type.OptionalType(type.StringType()),
        'external_id': type.OptionalType(type.StringType()),
        'hardware_id': type.OptionalType(type.StringType()),
        'ip_addresses': type.OptionalType(type.ListType(type.StringType())),
        'node_type': type.OptionalType(type.StringType()),
        'origin_id': type.OptionalType(type.StringType()),
        'origin_properties': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'KeyValuePair'))),
        'os_type': type.OptionalType(type.StringType()),
        'os_version': type.OptionalType(type.StringType()),
        'parent_compute_collection': type.OptionalType(type.StringType()),
        'stateless': type.OptionalType(type.BooleanType()),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_last_sync_time': type.OptionalType(type.IntegerType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
    },
    DiscoveredNode,
    False,
    None))



class DiscoveredResource(VapiStruct):
    """
    Base class for resources that are discovered and automatically updated

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "DiscoveredResource"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_last_sync_time': 'last_sync_time',
                            'description': 'description',
                            'display_name': 'display_name',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 last_sync_time=None,
                 description=None,
                 display_name=None,
                 resource_type='DiscoveredResource',
                 tags=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  last_sync_time: :class:`long` or ``None``
        :param last_sync_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  resource_type: :class:`str`
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.last_sync_time = last_sync_time
        self.description = description
        self.display_name = display_name
        self._resource_type = resource_type
        self.tags = tags
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

DiscoveredResource._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.discovered_resource', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_last_sync_time': type.OptionalType(type.IntegerType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
    },
    DiscoveredResource,
    False,
    None))



class DiscoveryProfileBindingMap(VapiStruct):
    """
    Base Discovery Profile Binding Map

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        VapiStruct.__init__(self)


DiscoveryProfileBindingMap._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.discovery_profile_binding_map', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
    },
    DiscoveryProfileBindingMap,
    False,
    None))



class DistributedFloodProtectionProfile(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "DistributedFloodProtectionProfile"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'enable_rst_spoofing': 'enable_rst_spoofing',
                            'enable_syncache': 'enable_syncache',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'icmp_active_flow_limit': 'icmp_active_flow_limit',
                            'other_active_conn_limit': 'other_active_conn_limit',
                            'tcp_half_open_conn_limit': 'tcp_half_open_conn_limit',
                            'udp_active_flow_limit': 'udp_active_flow_limit',
                            }

    def __init__(self,
                 enable_rst_spoofing=None,
                 enable_syncache=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='DistributedFloodProtectionProfile',
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 icmp_active_flow_limit=None,
                 other_active_conn_limit=None,
                 tcp_half_open_conn_limit=None,
                 udp_active_flow_limit=None,
                ):
        """
        :type  enable_rst_spoofing: :class:`bool` or ``None``
        :param enable_rst_spoofing: If set to true, rst spoofing will be enabled. Flag is used only for
            distributed firewall profiles.
        :type  enable_syncache: :class:`bool` or ``None``
        :param enable_syncache: If set to true, sync cache will be enabled. Flag is used only for
            distributed firewall profiles.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`FloodProtectionProfile.RESOURCE_TYPE_GATEWAYFLOODPROTECTIONPROFILE`
            *
              :attr:`FloodProtectionProfile.RESOURCE_TYPE_DISTRIBUTEDFLOODPROTECTIONPROFILE`
            
            GatewayFloodProtectionProfile is used for all Tier0 and Tier1
            gateways. DistributedFloodProtectionProfile is used for all
            Transport Nodes.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  icmp_active_flow_limit: :class:`long` or ``None``
        :param icmp_active_flow_limit: If this field is empty, firewall will not set a limit to active
            ICMP connections. format: int64
        :type  other_active_conn_limit: :class:`long` or ``None``
        :param other_active_conn_limit: If this field is empty, firewall will not set a limit to other
            active connections. besides UDP, ICMP and half open TCP
            connections. format: int64
        :type  tcp_half_open_conn_limit: :class:`long` or ``None``
        :param tcp_half_open_conn_limit: If this field is empty, firewall will not set a limit to half open
            TCP connections. format: int64
        :type  udp_active_flow_limit: :class:`long` or ``None``
        :param udp_active_flow_limit: If this field is empty, firewall will not set a limit to active UDP
            connections. format: int64
        """
        self.enable_rst_spoofing = enable_rst_spoofing
        self.enable_syncache = enable_syncache
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.icmp_active_flow_limit = icmp_active_flow_limit
        self.other_active_conn_limit = other_active_conn_limit
        self.tcp_half_open_conn_limit = tcp_half_open_conn_limit
        self.udp_active_flow_limit = udp_active_flow_limit
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

DistributedFloodProtectionProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.distributed_flood_protection_profile', {
        'enable_rst_spoofing': type.OptionalType(type.BooleanType()),
        'enable_syncache': type.OptionalType(type.BooleanType()),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'icmp_active_flow_limit': type.OptionalType(type.IntegerType()),
        'other_active_conn_limit': type.OptionalType(type.IntegerType()),
        'tcp_half_open_conn_limit': type.OptionalType(type.IntegerType()),
        'udp_active_flow_limit': type.OptionalType(type.IntegerType()),
    },
    DistributedFloodProtectionProfile,
    False,
    None))



class DistributedVirtualPortgroup(VapiStruct):
    """
    Distributed virtual portgroup on a VC

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    OVERALL_STATUS_RED = "RED"
    """


    """
    OVERALL_STATUS_YELLOW = "YELLOW"
    """


    """
    OVERALL_STATUS_GREEN = "GREEN"
    """


    """
    OVERALL_STATUS_GRAY = "GRAY"
    """


    """



    _canonical_to_pep_names = {
                            'backing_type': 'backing_type',
                            'key': 'key',
                            'overall_status': 'overall_status',
                            'cm_local_id': 'cm_local_id',
                            'external_id': 'external_id',
                            'origin_type': 'origin_type',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_last_sync_time': 'last_sync_time',
                            'description': 'description',
                            'display_name': 'display_name',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            }

    def __init__(self,
                 backing_type=None,
                 key=None,
                 overall_status=None,
                 cm_local_id=None,
                 external_id=None,
                 origin_type=None,
                 links=None,
                 schema=None,
                 self_=None,
                 last_sync_time=None,
                 description=None,
                 display_name=None,
                 resource_type=None,
                 tags=None,
                ):
        """
        :type  backing_type: :class:`str` or ``None``
        :param backing_type: For distributed virtual portgroup, backing type is standard. For
            logical switch portgroup, the backing type is set to nsx.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  key: :class:`str` or ``None``
        :param key: Generated UUID of the portgroup
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overall_status: :class:`str` or ``None``
        :param overall_status: Possible values are: 
            
            * :attr:`DistributedVirtualPortgroup.OVERALL_STATUS_RED`
            * :attr:`DistributedVirtualPortgroup.OVERALL_STATUS_YELLOW`
            * :attr:`DistributedVirtualPortgroup.OVERALL_STATUS_GREEN`
            * :attr:`DistributedVirtualPortgroup.OVERALL_STATUS_GRAY`
            
            This parameters reflects the managed entity status of the portgroup
            as reported by VC.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  cm_local_id: :class:`str` or ``None``
        :param cm_local_id: Id of the portgroup, eg. a mo-ref from VC.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  external_id: :class:`str` or ``None``
        :param external_id: External id of the virtual portgroup
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  origin_type: :class:`str` or ``None``
        :param origin_type: Portgroup type like DistributedVirtualPortgroup
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  last_sync_time: :class:`long` or ``None``
        :param last_sync_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  resource_type: :class:`str`
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        """
        self.backing_type = backing_type
        self.key = key
        self.overall_status = overall_status
        self.cm_local_id = cm_local_id
        self.external_id = external_id
        self.origin_type = origin_type
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.last_sync_time = last_sync_time
        self.description = description
        self.display_name = display_name
        self._resource_type = resource_type
        self.tags = tags
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

DistributedVirtualPortgroup._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.distributed_virtual_portgroup', {
        'backing_type': type.OptionalType(type.StringType()),
        'key': type.OptionalType(type.StringType()),
        'overall_status': type.OptionalType(type.StringType()),
        'cm_local_id': type.OptionalType(type.StringType()),
        'external_id': type.OptionalType(type.StringType()),
        'origin_type': type.OptionalType(type.StringType()),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_last_sync_time': type.OptionalType(type.IntegerType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
    },
    DistributedVirtualPortgroup,
    False,
    None))



class DistributedVirtualSwitch(VapiStruct):
    """
    DistributedVirtualSwitch on a VC

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'discovered_nodes': 'discovered_nodes',
                            'lacp_group_configs': 'lacp_group_configs',
                            'origin_properties': 'origin_properties',
                            'uplink_port_names': 'uplink_port_names',
                            'uplink_portgroup': 'uplink_portgroup',
                            'uuid': 'uuid',
                            'cm_local_id': 'cm_local_id',
                            'external_id': 'external_id',
                            'origin_id': 'origin_id',
                            'origin_type': 'origin_type',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_last_sync_time': 'last_sync_time',
                            'description': 'description',
                            'display_name': 'display_name',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            }

    def __init__(self,
                 discovered_nodes=None,
                 lacp_group_configs=None,
                 origin_properties=None,
                 uplink_port_names=None,
                 uplink_portgroup=None,
                 uuid=None,
                 cm_local_id=None,
                 external_id=None,
                 origin_id=None,
                 origin_type=None,
                 links=None,
                 schema=None,
                 self_=None,
                 last_sync_time=None,
                 description=None,
                 display_name=None,
                 resource_type=None,
                 tags=None,
                ):
        """
        :type  discovered_nodes: :class:`list` of :class:`DiscoveredNode` or ``None``
        :param discovered_nodes: Array of discovered nodes connected to this switch.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  lacp_group_configs: :class:`list` of :class:`LacpGroupConfigInfo` or ``None``
        :param lacp_group_configs: It contains information about VMware specific multiple dynamic LACP
            groups.
        :type  origin_properties: :class:`list` of :class:`KeyValuePair` or ``None``
        :param origin_properties: Key-Value map of additional properties of switch
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  uplink_port_names: :class:`list` of :class:`str` or ``None``
        :param uplink_port_names: The uniform name of uplink ports on each host.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  uplink_portgroup: :class:`DistributedVirtualPortgroup` or ``None``
        :param uplink_portgroup: Uplink portgroup of distributed virtual switch
        :type  uuid: :class:`str` or ``None``
        :param uuid: UUID of the switch
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  cm_local_id: :class:`str` or ``None``
        :param cm_local_id: ID of the virtual switch in compute manager
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  external_id: :class:`str` or ``None``
        :param external_id: External id of the virtual switch
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  origin_id: :class:`str` or ``None``
        :param origin_id: ID of the compute manager where this virtual switch is discovered.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  origin_type: :class:`str` or ``None``
        :param origin_type: Switch type like VmwareDistributedVirtualSwitch
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  last_sync_time: :class:`long` or ``None``
        :param last_sync_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  resource_type: :class:`str`
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        """
        self.discovered_nodes = discovered_nodes
        self.lacp_group_configs = lacp_group_configs
        self.origin_properties = origin_properties
        self.uplink_port_names = uplink_port_names
        self.uplink_portgroup = uplink_portgroup
        self.uuid = uuid
        self.cm_local_id = cm_local_id
        self.external_id = external_id
        self.origin_id = origin_id
        self.origin_type = origin_type
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.last_sync_time = last_sync_time
        self.description = description
        self.display_name = display_name
        self._resource_type = resource_type
        self.tags = tags
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

DistributedVirtualSwitch._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.distributed_virtual_switch', {
        'discovered_nodes': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'DiscoveredNode'))),
        'lacp_group_configs': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'LacpGroupConfigInfo'))),
        'origin_properties': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'KeyValuePair'))),
        'uplink_port_names': type.OptionalType(type.ListType(type.StringType())),
        'uplink_portgroup': type.OptionalType(type.ReferenceType(__name__, 'DistributedVirtualPortgroup')),
        'uuid': type.OptionalType(type.StringType()),
        'cm_local_id': type.OptionalType(type.StringType()),
        'external_id': type.OptionalType(type.StringType()),
        'origin_id': type.OptionalType(type.StringType()),
        'origin_type': type.OptionalType(type.StringType()),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_last_sync_time': type.OptionalType(type.IntegerType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
    },
    DistributedVirtualSwitch,
    False,
    None))



class DnsHeader(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    ADDRESS_TYPE_V4 = "V4"
    """


    """
    ADDRESS_TYPE_V6 = "V6"
    """


    """
    MESSAGE_TYPE_QUERY = "QUERY"
    """


    """
    MESSAGE_TYPE_RESPONSE = "RESPONSE"
    """


    """



    _canonical_to_pep_names = {
                            'address': 'address',
                            'address_type': 'address_type',
                            'message_type': 'message_type',
                            }

    def __init__(self,
                 address=None,
                 address_type=None,
                 message_type=None,
                ):
        """
        :type  address: :class:`str` or ``None``
        :param address: This is used to define what is being asked or responded. format:
            hostname-or-ip
        :type  address_type: :class:`str` or ``None``
        :param address_type: Possible values are: 
            
            * :attr:`DnsHeader.ADDRESS_TYPE_V4`
            * :attr:`DnsHeader.ADDRESS_TYPE_V6`
            
            This is used to specify the type of the address. V4 - The address
            provided is an IPv4 domain name/IP address, the Type in query or
            response will be A V6 - The address provided is an IPv6 domain
            name/IP address, the Type in query or response will be AAAA
        :type  message_type: :class:`str` or ``None``
        :param message_type: Possible values are: 
            
            * :attr:`DnsHeader.MESSAGE_TYPE_QUERY`
            * :attr:`DnsHeader.MESSAGE_TYPE_RESPONSE`
            
             Specifies the message type whether it is a query or a response.
        """
        self.address = address
        self.address_type = address_type
        self.message_type = message_type
        VapiStruct.__init__(self)


DnsHeader._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.dns_header', {
        'address': type.OptionalType(type.StringType()),
        'address_type': type.OptionalType(type.StringType()),
        'message_type': type.OptionalType(type.StringType()),
    },
    DnsHeader,
    False,
    None))



class DnsSecurityProfile(VapiStruct):
    """
    Used to configure DNS security profile

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'ttl': 'ttl',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 ttl=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  ttl: :class:`long` or ``None``
        :param ttl: Time to live for DNS cache entry in seconds. Valid TTL values are
            between 3600 to 864000. However, this field accepts values between
            0 through 864000. We define TTL type based on the value of TTL as
            follows: TTL 0 - cached entry never expires. TTL 1 to 3599 -
            invalid input and error is thrown TTL 3600 to 864000 - ttl is set
            to user input TTL field not set by user - TTL type is 'AUTO' and
            ttl value is set from DNS response packet. User defined TTL value
            is used only when it is betweeen 3600 to 864000. format: int64
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.ttl = ttl
        VapiStruct.__init__(self)


DnsSecurityProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.dns_security_profile', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'ttl': type.OptionalType(type.IntegerType()),
    },
    DnsSecurityProfile,
    False,
    None))



class DnsSecurityProfileBindingMap(VapiStruct):
    """
    This entity will be used to establish association between DNS security
    profile and Group. With this entity, user can specify intent for applying
    DNS security profile profile to particular Group.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'profile_path': 'profile_path',
                            'sequence_number': 'sequence_number',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 profile_path=None,
                 sequence_number=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  profile_path: :class:`str` or ``None``
        :param profile_path: PolicyPath of associated Profile
        :type  sequence_number: :class:`long` or ``None``
        :param sequence_number: Sequence number used to resolve conflicts betweeen two profiles
            applied on the same group. Lower sequence number takes higher
            precedence. Two binding maps applied to the same profile must have
            the same sequence number. User defined sequence numbers range from
            1 through 100,000. System defined sequence numbers range from
            100,001 through 200,000. format: int64
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.profile_path = profile_path
        self.sequence_number = sequence_number
        VapiStruct.__init__(self)


DnsSecurityProfileBindingMap._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.dns_security_profile_binding_map', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'profile_path': type.OptionalType(type.StringType()),
        'sequence_number': type.OptionalType(type.IntegerType()),
    },
    DnsSecurityProfileBindingMap,
    False,
    None))



class DnsSecurityProfileBindingMapListResult(VapiStruct):
    """
    Paged collection of DNS Security Profile Binding Map

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`DnsSecurityProfileBindingMap` or ``None``
        :param results: DNS Security Profile Binding Map List Results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


DnsSecurityProfileBindingMapListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.dns_security_profile_binding_map_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'DnsSecurityProfileBindingMap'))),
    },
    DnsSecurityProfileBindingMapListResult,
    False,
    None))



class DnsSecurityProfileListResult(VapiStruct):
    """
    Paged Collection of DnsSecurityProfile

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`DnsSecurityProfile` or ``None``
        :param results: DnsSecurityProfile list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


DnsSecurityProfileListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.dns_security_profile_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'DnsSecurityProfile'))),
    },
    DnsSecurityProfileListResult,
    False,
    None))



class Domain(VapiStruct):
    """
    Domain.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        VapiStruct.__init__(self)


Domain._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.domain', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
    },
    Domain,
    False,
    None))



class DomainDeploymentMap(VapiStruct):
    """
    Binding of domain to the enforcement point.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'enforcement_point_path': 'enforcement_point_path',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 enforcement_point_path=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  enforcement_point_path: :class:`str` or ``None``
        :param enforcement_point_path: Path of enforcement point on which domain shall be enforced.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.enforcement_point_path = enforcement_point_path
        VapiStruct.__init__(self)


DomainDeploymentMap._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.domain_deployment_map', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'enforcement_point_path': type.OptionalType(type.StringType()),
    },
    DomainDeploymentMap,
    False,
    None))



class DomainDeploymentMapListResult(VapiStruct):
    """
    Paged collection of Domain Deployment Map.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`DomainDeploymentMap` or ``None``
        :param results: Domain Deployment Map list result.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


DomainDeploymentMapListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.domain_deployment_map_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'DomainDeploymentMap'))),
    },
    DomainDeploymentMapListResult,
    False,
    None))



class DomainListResult(VapiStruct):
    """
    Paged Collection of Domains

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`Domain` or ``None``
        :param results: Domain list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


DomainListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.domain_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Domain'))),
    },
    DomainListResult,
    False,
    None))



class DonutConfiguration(VapiStruct):
    """
    Represents configuration of a Donut

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "DonutConfiguration"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'count': 'count',
                            'display_count': 'display_count',
                            'label': 'label',
                            'navigation': 'navigation',
                            'sections': 'sections',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'datasources': 'datasources',
                            'default_filter_value': 'default_filter_value',
                            'drilldown_id': 'drilldown_id',
                            'filter': 'filter',
                            'filter_value_required': 'filter_value_required',
                            'footer': 'footer',
                            'icons': 'icons',
                            'is_drilldown': 'is_drilldown',
                            'legend': 'legend',
                            'shared': 'shared',
                            'span': 'span',
                            'weight': 'weight',
                            }

    def __init__(self,
                 count=None,
                 display_count=None,
                 label=None,
                 navigation=None,
                 sections=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='DonutConfiguration',
                 tags=None,
                 datasources=None,
                 default_filter_value=None,
                 drilldown_id=None,
                 filter=None,
                 filter_value_required=None,
                 footer=None,
                 icons=None,
                 is_drilldown=None,
                 legend=None,
                 shared=None,
                 span=None,
                 weight=None,
                ):
        """
        :type  count: :class:`str` or ``None``
        :param count: Expression to retrieve count to be shown on Donut.
        :type  display_count: :class:`bool` or ``None``
        :param display_count: If true, displays the count of entities in the donut
        :type  label: :class:`Label` or ``None``
        :param label: Displayed at the middle of the donut, by default. It labels the
            entities of donut.
        :type  navigation: :class:`str` or ``None``
        :param navigation: Hyperlink of the specified UI page that provides details.
        :type  sections: :class:`list` of :class:`DonutSection` or ``None``
        :param sections: Sections
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Title of the widget. If display_name is omitted, the widget will be
            shown without a title.
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`WidgetConfiguration.RESOURCE_TYPE_LABELVALUECONFIGURATION`
            * :attr:`WidgetConfiguration.RESOURCE_TYPE_DONUTCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_MULTIWIDGETCONFIGURATION`
            * :attr:`WidgetConfiguration.RESOURCE_TYPE_CONTAINERCONFIGURATION`
            * :attr:`WidgetConfiguration.RESOURCE_TYPE_STATSCONFIGURATION`
            * :attr:`WidgetConfiguration.RESOURCE_TYPE_GRIDCONFIGURATION`
            * :attr:`WidgetConfiguration.RESOURCE_TYPE_GRAPHCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_CUSTOMWIDGETCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_DROPDOWNFILTERWIDGETCONFIGURATION`
            
            Supported visualization types are LabelValueConfiguration,
            DonutConfiguration, GridConfiguration, StatsConfiguration,
            MultiWidgetConfiguration, GraphConfiguration,
            ContainerConfiguration, CustomWidgetConfiguration and
            DropdownFilterWidgetConfiguration.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  datasources: :class:`list` of :class:`Datasource` or ``None``
        :param datasources: The 'datasources' represent the sources from which data will be
            fetched. Currently, only NSX-API is supported as a 'default'
            datasource. An example of specifying 'default' datasource along
            with the urls to fetch data from is given at 'example_request'
            section of 'CreateWidgetConfiguration' API.
        :type  default_filter_value: :class:`list` of :class:`DefaultFilterValue` or ``None``
        :param default_filter_value: Default filter values to be passed to datasources. This will be
            used when the report is requested without filter values.
        :type  drilldown_id: :class:`str` or ``None``
        :param drilldown_id: Id of drilldown widget, if any. Id should be a valid id of an
            existing widget. A widget is considered as drilldown widget when it
            is associated with any other widget and provides more detailed
            information about any data item from the parent widget.
        :type  filter: :class:`str` or ``None``
        :param filter: Id of filter widget for subscription, if any. Id should be a valid
            id of an existing filter widget. Filter widget should be from the
            same view. Datasource URLs should have placeholder values equal to
            filter alias to accept the filter value on filter change.
        :type  filter_value_required: :class:`bool` or ``None``
        :param filter_value_required: Flag to indicate that widget will continue to work without filter
            value. If this flag is set to false then default_filter_value is
            manadatory.
        :type  footer: :class:`Footer` or ``None``
        :param footer: 
        :type  icons: :class:`list` of :class:`Icon` or ``None``
        :param icons: Icons to be applied at dashboard for widgets and UI elements.
        :type  is_drilldown: :class:`bool` or ``None``
        :param is_drilldown: Set to true if this widget should be used as a drilldown.
        :type  legend: :class:`Legend` or ``None``
        :param legend: Legend to be displayed. If legend is not needed, do not include it.
        :type  shared: :class:`bool` or ``None``
        :param shared: Please use the property 'shared' of View instead of this. The
            widgets of a shared view are visible to other users.
        :type  span: :class:`long` or ``None``
        :param span: Represents the horizontal span of the widget / container. format:
            int32
        :type  weight: :class:`long` or ``None``
        :param weight: Specify relavite weight in WidgetItem for placement in a view.
            Please see WidgetItem for details. format: int32
        """
        self.count = count
        self.display_count = display_count
        self.label = label
        self.navigation = navigation
        self.sections = sections
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.datasources = datasources
        self.default_filter_value = default_filter_value
        self.drilldown_id = drilldown_id
        self.filter = filter
        self.filter_value_required = filter_value_required
        self.footer = footer
        self.icons = icons
        self.is_drilldown = is_drilldown
        self.legend = legend
        self.shared = shared
        self.span = span
        self.weight = weight
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

DonutConfiguration._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.donut_configuration', {
        'count': type.OptionalType(type.StringType()),
        'display_count': type.OptionalType(type.BooleanType()),
        'label': type.OptionalType(type.ReferenceType(__name__, 'Label')),
        'navigation': type.OptionalType(type.StringType()),
        'sections': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'DonutSection'))),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'datasources': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Datasource'))),
        'default_filter_value': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'DefaultFilterValue'))),
        'drilldown_id': type.OptionalType(type.StringType()),
        'filter': type.OptionalType(type.StringType()),
        'filter_value_required': type.OptionalType(type.BooleanType()),
        'footer': type.OptionalType(type.ReferenceType(__name__, 'Footer')),
        'icons': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Icon'))),
        'is_drilldown': type.OptionalType(type.BooleanType()),
        'legend': type.OptionalType(type.ReferenceType(__name__, 'Legend')),
        'shared': type.OptionalType(type.BooleanType()),
        'span': type.OptionalType(type.IntegerType()),
        'weight': type.OptionalType(type.IntegerType()),
    },
    DonutConfiguration,
    False,
    None))



class DonutPart(VapiStruct):
    """
    Represents an entity or portion to be plotted on a donut or stats chart.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'condition': 'condition',
                            'drilldown_id': 'drilldown_id',
                            'field': 'field',
                            'hide_empty_legend': 'hide_empty_legend',
                            'label': 'label',
                            'navigation': 'navigation',
                            'render_configuration': 'render_configuration',
                            'tooltip': 'tooltip',
                            }

    def __init__(self,
                 condition=None,
                 drilldown_id=None,
                 field=None,
                 hide_empty_legend=None,
                 label=None,
                 navigation=None,
                 render_configuration=None,
                 tooltip=None,
                ):
        """
        :type  condition: :class:`str` or ``None``
        :param condition: If the condition is met then the part will be displayed. Examples
            of expression syntax are provided under 'example_request' section
            of 'CreateWidgetConfiguration' API.
        :type  drilldown_id: :class:`str` or ``None``
        :param drilldown_id: Id of drilldown widget, if any. Id should be a valid id of an
            existing widget. A widget is considered as drilldown widget when it
            is associated with any other widget and provides more detailed
            information about any data item from the parent widget.
        :type  field: :class:`str` or ``None``
        :param field: A numerical value that represents the portion or entity of the
            donut or stats chart.
        :type  hide_empty_legend: :class:`bool` or ``None``
        :param hide_empty_legend: If true, legend will be shown only if the data for the part is
            available. This is applicable only if legends are specified in
            widget configuration.
        :type  label: :class:`Label` or ``None``
        :param label: If a section 'template' holds this donut or stats part, then the
            label is auto-generated from the fetched field values after
            applying the template.
        :type  navigation: :class:`str` or ``None``
        :param navigation: Hyperlink of the specified UI page that provides details. If
            drilldown_id is provided, then navigation cannot be used.
        :type  render_configuration: :class:`list` of :class:`RenderConfiguration` or ``None``
        :param render_configuration: Additional rendering or conditional evaluation of the field values
            to be performed, if any.
        :type  tooltip: :class:`list` of :class:`Tooltip` or ``None``
        :param tooltip: Multi-line text to be shown on tooltip while hovering over the
            portion.
        """
        self.condition = condition
        self.drilldown_id = drilldown_id
        self.field = field
        self.hide_empty_legend = hide_empty_legend
        self.label = label
        self.navigation = navigation
        self.render_configuration = render_configuration
        self.tooltip = tooltip
        VapiStruct.__init__(self)


DonutPart._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.donut_part', {
        'condition': type.OptionalType(type.StringType()),
        'drilldown_id': type.OptionalType(type.StringType()),
        'field': type.OptionalType(type.StringType()),
        'hide_empty_legend': type.OptionalType(type.BooleanType()),
        'label': type.OptionalType(type.ReferenceType(__name__, 'Label')),
        'navigation': type.OptionalType(type.StringType()),
        'render_configuration': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'RenderConfiguration'))),
        'tooltip': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tooltip'))),
    },
    DonutPart,
    False,
    None))



class DonutSection(VapiStruct):
    """
    Represents high level logical grouping of portions or segments of a donut /
    stats chart.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'parts': 'parts',
                            'row_list_field': 'row_list_field',
                            'template': 'template',
                            }

    def __init__(self,
                 parts=None,
                 row_list_field=None,
                 template=None,
                ):
        """
        :type  parts: :class:`list` of :class:`DonutPart` or ``None``
        :param parts: Array of portions or parts of the donut or stats chart.
        :type  row_list_field: :class:`str` or ``None``
        :param row_list_field: Field of the root of the api result set for forming parts.
        :type  template: :class:`bool` or ``None``
        :param template: If true, the section will be appled as template for forming parts.
            Only one part will be formed from each element of 'row_list_field'.
        """
        self.parts = parts
        self.row_list_field = row_list_field
        self.template = template
        VapiStruct.__init__(self)


DonutSection._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.donut_section', {
        'parts': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'DonutPart'))),
        'row_list_field': type.OptionalType(type.StringType()),
        'template': type.OptionalType(type.BooleanType()),
    },
    DonutSection,
    False,
    None))



class DropdownFilterWidgetConfiguration(VapiStruct):
    """
    Represents configuration for dropdown filter widget.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'default_value': 'default_value',
                            'dropdown_item': 'dropdown_item',
                            'placeholder_msg': 'placeholder_msg',
                            'static_filter_condition': 'static_filter_condition',
                            'static_filters': 'static_filters',
                            'alias': 'alias',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'datasources': 'datasources',
                            'default_filter_value': 'default_filter_value',
                            'drilldown_id': 'drilldown_id',
                            'filter': 'filter',
                            'filter_value_required': 'filter_value_required',
                            'footer': 'footer',
                            'icons': 'icons',
                            'is_drilldown': 'is_drilldown',
                            'legend': 'legend',
                            'shared': 'shared',
                            'span': 'span',
                            'weight': 'weight',
                            }

    def __init__(self,
                 default_value=None,
                 dropdown_item=None,
                 placeholder_msg=None,
                 static_filter_condition=None,
                 static_filters=None,
                 alias=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 datasources=None,
                 default_filter_value=None,
                 drilldown_id=None,
                 filter=None,
                 filter_value_required=None,
                 footer=None,
                 icons=None,
                 is_drilldown=None,
                 legend=None,
                 shared=None,
                 span=None,
                 weight=None,
                ):
        """
        :type  default_value: :class:`str` or ``None``
        :param default_value: Expression to specify default value of filter.
        :type  dropdown_item: :class:`DropdownItem` or ``None``
        :param dropdown_item: Defines the item of a dropdown.
        :type  placeholder_msg: :class:`str` or ``None``
        :param placeholder_msg: Placeholder message to be displayed in dropdown filter.
        :type  static_filter_condition: :class:`str` or ``None``
        :param static_filter_condition: If the condition is met then the static filter will be added. If no
            condition is provided, then the static filters will be applied
            unconditionally.
        :type  static_filters: :class:`list` of :class:`StaticFilter` or ``None``
        :param static_filters: Additional static items to be added in dropdown filter. Example can
            be 'ALL'.
        :type  alias: :class:`str` or ``None``
        :param alias: Alias to be used when emitting filter value.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Title of the widget. If display_name is omitted, the widget will be
            shown without a title.
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`WidgetConfiguration.RESOURCE_TYPE_LABELVALUECONFIGURATION`
            * :attr:`WidgetConfiguration.RESOURCE_TYPE_DONUTCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_MULTIWIDGETCONFIGURATION`
            * :attr:`WidgetConfiguration.RESOURCE_TYPE_CONTAINERCONFIGURATION`
            * :attr:`WidgetConfiguration.RESOURCE_TYPE_STATSCONFIGURATION`
            * :attr:`WidgetConfiguration.RESOURCE_TYPE_GRIDCONFIGURATION`
            * :attr:`WidgetConfiguration.RESOURCE_TYPE_GRAPHCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_CUSTOMWIDGETCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_DROPDOWNFILTERWIDGETCONFIGURATION`
            
            Supported visualization types are LabelValueConfiguration,
            DonutConfiguration, GridConfiguration, StatsConfiguration,
            MultiWidgetConfiguration, GraphConfiguration,
            ContainerConfiguration, CustomWidgetConfiguration and
            DropdownFilterWidgetConfiguration.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  datasources: :class:`list` of :class:`Datasource` or ``None``
        :param datasources: The 'datasources' represent the sources from which data will be
            fetched. Currently, only NSX-API is supported as a 'default'
            datasource. An example of specifying 'default' datasource along
            with the urls to fetch data from is given at 'example_request'
            section of 'CreateWidgetConfiguration' API.
        :type  default_filter_value: :class:`list` of :class:`DefaultFilterValue` or ``None``
        :param default_filter_value: Default filter values to be passed to datasources. This will be
            used when the report is requested without filter values.
        :type  drilldown_id: :class:`str` or ``None``
        :param drilldown_id: Id of drilldown widget, if any. Id should be a valid id of an
            existing widget. A widget is considered as drilldown widget when it
            is associated with any other widget and provides more detailed
            information about any data item from the parent widget.
        :type  filter: :class:`str` or ``None``
        :param filter: Id of filter widget for subscription, if any. Id should be a valid
            id of an existing filter widget. Filter widget should be from the
            same view. Datasource URLs should have placeholder values equal to
            filter alias to accept the filter value on filter change.
        :type  filter_value_required: :class:`bool` or ``None``
        :param filter_value_required: Flag to indicate that widget will continue to work without filter
            value. If this flag is set to false then default_filter_value is
            manadatory.
        :type  footer: :class:`Footer` or ``None``
        :param footer: 
        :type  icons: :class:`list` of :class:`Icon` or ``None``
        :param icons: Icons to be applied at dashboard for widgets and UI elements.
        :type  is_drilldown: :class:`bool` or ``None``
        :param is_drilldown: Set to true if this widget should be used as a drilldown.
        :type  legend: :class:`Legend` or ``None``
        :param legend: Legend to be displayed. If legend is not needed, do not include it.
        :type  shared: :class:`bool` or ``None``
        :param shared: Please use the property 'shared' of View instead of this. The
            widgets of a shared view are visible to other users.
        :type  span: :class:`long` or ``None``
        :param span: Represents the horizontal span of the widget / container. format:
            int32
        :type  weight: :class:`long` or ``None``
        :param weight: Specify relavite weight in WidgetItem for placement in a view.
            Please see WidgetItem for details. format: int32
        """
        self.default_value = default_value
        self.dropdown_item = dropdown_item
        self.placeholder_msg = placeholder_msg
        self.static_filter_condition = static_filter_condition
        self.static_filters = static_filters
        self.alias = alias
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.datasources = datasources
        self.default_filter_value = default_filter_value
        self.drilldown_id = drilldown_id
        self.filter = filter
        self.filter_value_required = filter_value_required
        self.footer = footer
        self.icons = icons
        self.is_drilldown = is_drilldown
        self.legend = legend
        self.shared = shared
        self.span = span
        self.weight = weight
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

DropdownFilterWidgetConfiguration._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.dropdown_filter_widget_configuration', {
        'default_value': type.OptionalType(type.StringType()),
        'dropdown_item': type.OptionalType(type.ReferenceType(__name__, 'DropdownItem')),
        'placeholder_msg': type.OptionalType(type.StringType()),
        'static_filter_condition': type.OptionalType(type.StringType()),
        'static_filters': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'StaticFilter'))),
        'alias': type.OptionalType(type.StringType()),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'datasources': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Datasource'))),
        'default_filter_value': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'DefaultFilterValue'))),
        'drilldown_id': type.OptionalType(type.StringType()),
        'filter': type.OptionalType(type.StringType()),
        'filter_value_required': type.OptionalType(type.BooleanType()),
        'footer': type.OptionalType(type.ReferenceType(__name__, 'Footer')),
        'icons': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Icon'))),
        'is_drilldown': type.OptionalType(type.BooleanType()),
        'legend': type.OptionalType(type.ReferenceType(__name__, 'Legend')),
        'shared': type.OptionalType(type.BooleanType()),
        'span': type.OptionalType(type.IntegerType()),
        'weight': type.OptionalType(type.IntegerType()),
    },
    DropdownFilterWidgetConfiguration,
    False,
    None))



class DropdownItem(VapiStruct):
    """
    Dropdown item definition

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'display_name': 'display_name',
                            'field': 'field',
                            'value': 'value',
                            }

    def __init__(self,
                 display_name=None,
                 field=None,
                 value=None,
                ):
        """
        :type  display_name: :class:`str` or ``None``
        :param display_name: expression to extract display name to be shown in the drop down.
        :type  field: :class:`str` or ``None``
        :param field: An expression that represents the items of the dropdown filter.
        :type  value: :class:`str` or ``None``
        :param value: Value of filter inside dropdown filter.
        """
        self.display_name = display_name
        self.field = field
        self.value = value
        VapiStruct.__init__(self)


DropdownItem._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.dropdown_item', {
        'display_name': type.OptionalType(type.StringType()),
        'field': type.OptionalType(type.StringType()),
        'value': type.OptionalType(type.StringType()),
    },
    DropdownItem,
    False,
    None))



class DuplicateIPDetectionOptions(VapiStruct):
    """
    Contains dupliacte IP detection related discovery options.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'duplicate_ip_detection_enabled': 'duplicate_ip_detection_enabled',
                            }

    def __init__(self,
                 duplicate_ip_detection_enabled=None,
                ):
        """
        :type  duplicate_ip_detection_enabled: :class:`bool` or ``None``
        :param duplicate_ip_detection_enabled: Indicates whether duplicate IP detection should be enabled
        """
        self.duplicate_ip_detection_enabled = duplicate_ip_detection_enabled
        VapiStruct.__init__(self)


DuplicateIPDetectionOptions._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.duplicate_IP_detection_options', {
        'duplicate_ip_detection_enabled': type.OptionalType(type.BooleanType()),
    },
    DuplicateIPDetectionOptions,
    False,
    None))



class EULAAcceptance(VapiStruct):
    """
    Indicate the status of End User License Agreement acceptance

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'acceptance': 'acceptance',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 acceptance=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  acceptance: :class:`bool` or ``None``
        :param acceptance: Acceptance status of End User License Agreement
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.acceptance = acceptance
        VapiStruct.__init__(self)


EULAAcceptance._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.EULA_acceptance', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'acceptance': type.OptionalType(type.BooleanType()),
    },
    EULAAcceptance,
    False,
    None))



class EULAContent(VapiStruct):
    """
    End User License Agreement content

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'content': 'content',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 content=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  content: :class:`str` or ``None``
        :param content: Content of End User License Agreement
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.content = content
        VapiStruct.__init__(self)


EULAContent._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.EULA_content', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'content': type.OptionalType(type.StringType()),
    },
    EULAContent,
    False,
    None))



class EdgeConfigurationState(VapiStruct):
    """
    This contains fields that captures state of Trackable entities. Edge and
    VPN state entities extend this object.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    STATE_PENDING = "pending"
    """


    """
    STATE_IN_PROGRESS = "in_progress"
    """


    """
    STATE_SUCCESS = "success"
    """


    """
    STATE_FAILED = "failed"
    """


    """
    STATE_PARTIAL_SUCCESS = "partial_success"
    """


    """
    STATE_ORPHANED = "orphaned"
    """


    """
    STATE_UNKNOWN = "unknown"
    """


    """
    STATE_ERROR = "error"
    """


    """
    STATE_IN_SYNC = "in_sync"
    """


    """
    STATE_NOT_AVAILABLE = "NOT_AVAILABLE"
    """


    """
    STATE_VM_DEPLOYMENT_QUEUED = "VM_DEPLOYMENT_QUEUED"
    """


    """
    STATE_VM_DEPLOYMENT_IN_PROGRESS = "VM_DEPLOYMENT_IN_PROGRESS"
    """


    """
    STATE_VM_DEPLOYMENT_FAILED = "VM_DEPLOYMENT_FAILED"
    """


    """
    STATE_VM_POWER_ON_IN_PROGRESS = "VM_POWER_ON_IN_PROGRESS"
    """


    """
    STATE_VM_POWER_ON_FAILED = "VM_POWER_ON_FAILED"
    """


    """
    STATE_REGISTRATION_PENDING = "REGISTRATION_PENDING"
    """


    """
    STATE_NODE_NOT_READY = "NODE_NOT_READY"
    """


    """
    STATE_NODE_READY = "NODE_READY"
    """


    """
    STATE_VM_POWER_OFF_IN_PROGRESS = "VM_POWER_OFF_IN_PROGRESS"
    """


    """
    STATE_VM_POWER_OFF_FAILED = "VM_POWER_OFF_FAILED"
    """


    """
    STATE_VM_UNDEPLOY_IN_PROGRESS = "VM_UNDEPLOY_IN_PROGRESS"
    """


    """
    STATE_VM_UNDEPLOY_FAILED = "VM_UNDEPLOY_FAILED"
    """


    """
    STATE_VM_UNDEPLOY_SUCCESSFUL = "VM_UNDEPLOY_SUCCESSFUL"
    """


    """
    STATE_EDGE_CONFIG_ERROR = "EDGE_CONFIG_ERROR"
    """


    """
    STATE_VM_DEPLOYMENT_RESTARTED = "VM_DEPLOYMENT_RESTARTED"
    """


    """
    STATE_REGISTRATION_FAILED = "REGISTRATION_FAILED"
    """


    """
    STATE_TRANSPORT_NODE_SYNC_PENDING = "TRANSPORT_NODE_SYNC_PENDING"
    """


    """
    STATE_TRANSPORT_NODE_CONFIGURATION_MISSING = "TRANSPORT_NODE_CONFIGURATION_MISSING"
    """


    """
    STATE_EDGE_HARDWARE_NOT_SUPPORTED = "EDGE_HARDWARE_NOT_SUPPORTED"
    """


    """
    STATE_MULTIPLE_OVERLAY_TZS_NOT_SUPPORTED = "MULTIPLE_OVERLAY_TZS_NOT_SUPPORTED"
    """


    """
    STATE_TN_OVERLAY_TZ_IN_USE_BY_EDGE_CLUSTER = "TN_OVERLAY_TZ_IN_USE_BY_EDGE_CLUSTER"
    """


    """
    STATE_TZ_ENDPOINTS_NOT_SPECIFIED = "TZ_ENDPOINTS_NOT_SPECIFIED"
    """


    """
    STATE_NO_PNIC_PREPARED_IN_EDGE = "NO_PNIC_PREPARED_IN_EDGE"
    """


    """
    STATE_APPLIANCE_INTERNAL_ERROR = "APPLIANCE_INTERNAL_ERROR"
    """


    """
    STATE_VTEP_DHCP_NOT_SUPPORTED = "VTEP_DHCP_NOT_SUPPORTED"
    """


    """
    STATE_UNSUPPORTED_HOST_SWITCH_PROFILE = "UNSUPPORTED_HOST_SWITCH_PROFILE"
    """


    """
    STATE_UPLINK_HOST_SWITCH_PROFILE_NOT_SPECIFIED = "UPLINK_HOST_SWITCH_PROFILE_NOT_SPECIFIED"
    """


    """
    STATE_HOSTSWITCH_PROFILE_NOT_FOUND = "HOSTSWITCH_PROFILE_NOT_FOUND"
    """


    """
    STATE_LLDP_SEND_ENABLED_NOT_SUPPORTED = "LLDP_SEND_ENABLED_NOT_SUPPORTED"
    """


    """
    STATE_UNSUPPORTED_NAMED_TEAMING_POLICY = "UNSUPPORTED_NAMED_TEAMING_POLICY"
    """


    """
    STATE_LBSRCID_NOT_SUPPORTED_FOR_EDGE_VM = "LBSRCID_NOT_SUPPORTED_FOR_EDGE_VM"
    """


    """
    STATE_LACP_NOT_SUPPORTED_FOR_EDGE_VM = "LACP_NOT_SUPPORTED_FOR_EDGE_VM"
    """


    """
    STATE_STANDBY_UPLINKS_NOT_SUPPORTED_FOR_EDGE_VM = "STANDBY_UPLINKS_NOT_SUPPORTED_FOR_EDGE_VM"
    """


    """
    STATE_MULTIPLE_ACTIVE_UPLINKS_NOT_SUPPORTED_FOR_EDGE = "MULTIPLE_ACTIVE_UPLINKS_NOT_SUPPORTED_FOR_EDGE"
    """


    """
    STATE_UNSUPPORTED_LACP_LB_ALGO_FOR_NODE = "UNSUPPORTED_LACP_LB_ALGO_FOR_NODE"
    """


    """
    STATE_EDGE_NODE_VERSION_NOT_SUPPORTED = "EDGE_NODE_VERSION_NOT_SUPPORTED"
    """


    """
    STATE_NO_PNIC_SPECIFIED_IN_TN = "NO_PNIC_SPECIFIED_IN_TN"
    """


    """
    STATE_INVALID_PNIC_DEVICE_NAME = "INVALID_PNIC_DEVICE_NAME"
    """


    """
    STATE_TRANSPORT_NODE_READY = "TRANSPORT_NODE_READY"
    """


    """
    STATE_VM_NETWORK_EDIT_PENDING = "VM_NETWORK_EDIT_PENDING"
    """


    """
    STATE_UNSUPPORTED_DEFAULT_TEAMING_POLICY = "UNSUPPORTED_DEFAULT_TEAMING_POLICY"
    """


    """
    STATE_MPA_DISCONNECTED = "MPA_DISCONNECTED"
    """


    """
    STATE_VM_RENAME_PENDING = "VM_RENAME_PENDING"
    """


    """
    STATE_VM_CONFIG_EDIT_PENDING = "VM_CONFIG_EDIT_PENDING"
    """


    """
    STATE_VM_NETWORK_EDIT_FAILED = "VM_NETWORK_EDIT_FAILED"
    """


    """
    STATE_VM_RENAME_FAILED = "VM_RENAME_FAILED"
    """


    """
    STATE_VM_CONFIG_EDIT_FAILED = "VM_CONFIG_EDIT_FAILED"
    """


    """
    STATE_VM_CONFIG_DISCREPANCY = "VM_CONFIG_DISCREPANCY"
    """


    """
    STATE_VM_NODE_REFRESH_FAILED = "VM_NODE_REFRESH_FAILED"
    """


    """
    STATE_VM_PLACEMENT_REFRESH_FAILED = "VM_PLACEMENT_REFRESH_FAILED"
    """


    """
    STATE_REGISTRATION_TIMEDOUT = "REGISTRATION_TIMEDOUT"
    """


    """



    _canonical_to_pep_names = {
                            'details': 'details',
                            'failure_code': 'failure_code',
                            'failure_message': 'failure_message',
                            'state': 'state',
                            'pending_change_list': 'pending_change_list',
                            }

    def __init__(self,
                 details=None,
                 failure_code=None,
                 failure_message=None,
                 state=None,
                 pending_change_list=None,
                ):
        """
        :type  details: :class:`list` of :class:`ConfigurationStateElement` or ``None``
        :param details: Array of configuration state of various sub systems
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  failure_code: :class:`long` or ``None``
        :param failure_code: Error code format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  failure_message: :class:`str` or ``None``
        :param failure_message: Error message in case of failure
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  state: :class:`str` or ``None``
        :param state: Possible values are: 
            
            * :attr:`EdgeConfigurationState.STATE_PENDING`
            * :attr:`EdgeConfigurationState.STATE_IN_PROGRESS`
            * :attr:`EdgeConfigurationState.STATE_SUCCESS`
            * :attr:`EdgeConfigurationState.STATE_FAILED`
            * :attr:`EdgeConfigurationState.STATE_PARTIAL_SUCCESS`
            * :attr:`EdgeConfigurationState.STATE_ORPHANED`
            * :attr:`EdgeConfigurationState.STATE_UNKNOWN`
            * :attr:`EdgeConfigurationState.STATE_ERROR`
            * :attr:`EdgeConfigurationState.STATE_IN_SYNC`
            * :attr:`EdgeConfigurationState.STATE_NOT_AVAILABLE`
            * :attr:`EdgeConfigurationState.STATE_VM_DEPLOYMENT_QUEUED`
            * :attr:`EdgeConfigurationState.STATE_VM_DEPLOYMENT_IN_PROGRESS`
            * :attr:`EdgeConfigurationState.STATE_VM_DEPLOYMENT_FAILED`
            * :attr:`EdgeConfigurationState.STATE_VM_POWER_ON_IN_PROGRESS`
            * :attr:`EdgeConfigurationState.STATE_VM_POWER_ON_FAILED`
            * :attr:`EdgeConfigurationState.STATE_REGISTRATION_PENDING`
            * :attr:`EdgeConfigurationState.STATE_NODE_NOT_READY`
            * :attr:`EdgeConfigurationState.STATE_NODE_READY`
            * :attr:`EdgeConfigurationState.STATE_VM_POWER_OFF_IN_PROGRESS`
            * :attr:`EdgeConfigurationState.STATE_VM_POWER_OFF_FAILED`
            * :attr:`EdgeConfigurationState.STATE_VM_UNDEPLOY_IN_PROGRESS`
            * :attr:`EdgeConfigurationState.STATE_VM_UNDEPLOY_FAILED`
            * :attr:`EdgeConfigurationState.STATE_VM_UNDEPLOY_SUCCESSFUL`
            * :attr:`EdgeConfigurationState.STATE_EDGE_CONFIG_ERROR`
            * :attr:`EdgeConfigurationState.STATE_VM_DEPLOYMENT_RESTARTED`
            * :attr:`EdgeConfigurationState.STATE_REGISTRATION_FAILED`
            * :attr:`EdgeConfigurationState.STATE_TRANSPORT_NODE_SYNC_PENDING`
            *
              :attr:`EdgeConfigurationState.STATE_TRANSPORT_NODE_CONFIGURATION_MISSING`
            * :attr:`EdgeConfigurationState.STATE_EDGE_HARDWARE_NOT_SUPPORTED`
            *
              :attr:`EdgeConfigurationState.STATE_MULTIPLE_OVERLAY_TZS_NOT_SUPPORTED`
            *
              :attr:`EdgeConfigurationState.STATE_TN_OVERLAY_TZ_IN_USE_BY_EDGE_CLUSTER`
            * :attr:`EdgeConfigurationState.STATE_TZ_ENDPOINTS_NOT_SPECIFIED`
            * :attr:`EdgeConfigurationState.STATE_NO_PNIC_PREPARED_IN_EDGE`
            * :attr:`EdgeConfigurationState.STATE_APPLIANCE_INTERNAL_ERROR`
            * :attr:`EdgeConfigurationState.STATE_VTEP_DHCP_NOT_SUPPORTED`
            *
              :attr:`EdgeConfigurationState.STATE_UNSUPPORTED_HOST_SWITCH_PROFILE`
            *
              :attr:`EdgeConfigurationState.STATE_UPLINK_HOST_SWITCH_PROFILE_NOT_SPECIFIED`
            * :attr:`EdgeConfigurationState.STATE_HOSTSWITCH_PROFILE_NOT_FOUND`
            *
              :attr:`EdgeConfigurationState.STATE_LLDP_SEND_ENABLED_NOT_SUPPORTED`
            *
              :attr:`EdgeConfigurationState.STATE_UNSUPPORTED_NAMED_TEAMING_POLICY`
            *
              :attr:`EdgeConfigurationState.STATE_LBSRCID_NOT_SUPPORTED_FOR_EDGE_VM`
            *
              :attr:`EdgeConfigurationState.STATE_LACP_NOT_SUPPORTED_FOR_EDGE_VM`
            *
              :attr:`EdgeConfigurationState.STATE_STANDBY_UPLINKS_NOT_SUPPORTED_FOR_EDGE_VM`
            *
              :attr:`EdgeConfigurationState.STATE_MULTIPLE_ACTIVE_UPLINKS_NOT_SUPPORTED_FOR_EDGE`
            *
              :attr:`EdgeConfigurationState.STATE_UNSUPPORTED_LACP_LB_ALGO_FOR_NODE`
            *
              :attr:`EdgeConfigurationState.STATE_EDGE_NODE_VERSION_NOT_SUPPORTED`
            * :attr:`EdgeConfigurationState.STATE_NO_PNIC_SPECIFIED_IN_TN`
            * :attr:`EdgeConfigurationState.STATE_INVALID_PNIC_DEVICE_NAME`
            * :attr:`EdgeConfigurationState.STATE_TRANSPORT_NODE_READY`
            * :attr:`EdgeConfigurationState.STATE_VM_NETWORK_EDIT_PENDING`
            *
              :attr:`EdgeConfigurationState.STATE_UNSUPPORTED_DEFAULT_TEAMING_POLICY`
            * :attr:`EdgeConfigurationState.STATE_MPA_DISCONNECTED`
            * :attr:`EdgeConfigurationState.STATE_VM_RENAME_PENDING`
            * :attr:`EdgeConfigurationState.STATE_VM_CONFIG_EDIT_PENDING`
            * :attr:`EdgeConfigurationState.STATE_VM_NETWORK_EDIT_FAILED`
            * :attr:`EdgeConfigurationState.STATE_VM_RENAME_FAILED`
            * :attr:`EdgeConfigurationState.STATE_VM_CONFIG_EDIT_FAILED`
            * :attr:`EdgeConfigurationState.STATE_VM_CONFIG_DISCREPANCY`
            * :attr:`EdgeConfigurationState.STATE_VM_NODE_REFRESH_FAILED`
            * :attr:`EdgeConfigurationState.STATE_VM_PLACEMENT_REFRESH_FAILED`
            * :attr:`EdgeConfigurationState.STATE_REGISTRATION_TIMEDOUT`
            
            Gives details of state of desired configuration. Additional enums
            with more details on progress/success/error states are sent for
            edge node. The success states are NODE_READY and
            TRANSPORT_NODE_READY, pending states are {VM_DEPLOYMENT_QUEUED,
            VM_DEPLOYMENT_IN_PROGRESS, REGISTRATION_PENDING} and other values
            indicate failures. \"in_sync\" state indicates that the desired
            configuration has been received by the host to which it applies,
            but is not yet in effect. When the configuration is actually in
            effect, the state will change to \"success\". Please note, failed
            state is deprecated.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  pending_change_list: :class:`list` of :class:`str` or ``None``
        :param pending_change_list: Request identifier of the API which modified the entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.details = details
        self.failure_code = failure_code
        self.failure_message = failure_message
        self.state = state
        self.pending_change_list = pending_change_list
        VapiStruct.__init__(self)


EdgeConfigurationState._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.edge_configuration_state', {
        'details': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ConfigurationStateElement'))),
        'failure_code': type.OptionalType(type.IntegerType()),
        'failure_message': type.OptionalType(type.StringType()),
        'state': type.OptionalType(type.StringType()),
        'pending_change_list': type.OptionalType(type.ListType(type.StringType())),
    },
    EdgeConfigurationState,
    False,
    None))



class EffectiveIPInfo(VapiStruct):
    """
    List of effective ip address along with site id

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'effective_ips': 'effective_ips',
                            'site_id': 'site_id',
                            }

    def __init__(self,
                 effective_ips=None,
                 site_id=None,
                ):
        """
        :type  effective_ips: :class:`list` of :class:`str` or ``None``
        :param effective_ips: 
        :type  site_id: :class:`str` or ``None``
        :param site_id: Id of the site to which the effective IPs belong to
        """
        self.effective_ips = effective_ips
        self.site_id = site_id
        VapiStruct.__init__(self)


EffectiveIPInfo._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.effective_IP_info', {
        'effective_ips': type.OptionalType(type.ListType(type.StringType())),
        'site_id': type.OptionalType(type.StringType()),
    },
    EffectiveIPInfo,
    False,
    None))



class EgressRateLimiter(VapiStruct):
    """
    A shaper that specifies egress rate properties in Mb/s

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "EgressRateLimiter"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'average_bandwidth': 'average_bandwidth',
                            'burst_size': 'burst_size',
                            'peak_bandwidth': 'peak_bandwidth',
                            'enabled': 'enabled',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 average_bandwidth=None,
                 burst_size=None,
                 peak_bandwidth=None,
                 enabled=None,
                 resource_type='EgressRateLimiter',
                ):
        """
        :type  average_bandwidth: :class:`long` or ``None``
        :param average_bandwidth: Average bandwidth in Mb/s format: int32
        :type  burst_size: :class:`long` or ``None``
        :param burst_size: Burst size in bytes format: int32
        :type  peak_bandwidth: :class:`long` or ``None``
        :param peak_bandwidth: Peak bandwidth in Mb/s format: int32
        :type  enabled: :class:`bool` or ``None``
        :param enabled: 
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`QosBaseRateLimiter.RESOURCE_TYPE_INGRESSRATELIMITER`
            *
              :attr:`QosBaseRateLimiter.RESOURCE_TYPE_INGRESSBROADCASTRATELIMITER`
            * :attr:`QosBaseRateLimiter.RESOURCE_TYPE_EGRESSRATELIMITER`
            
             Type rate limiter
        """
        self.average_bandwidth = average_bandwidth
        self.burst_size = burst_size
        self.peak_bandwidth = peak_bandwidth
        self.enabled = enabled
        self._resource_type = resource_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

EgressRateLimiter._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.egress_rate_limiter', {
        'average_bandwidth': type.OptionalType(type.IntegerType()),
        'burst_size': type.OptionalType(type.IntegerType()),
        'peak_bandwidth': type.OptionalType(type.IntegerType()),
        'enabled': type.OptionalType(type.BooleanType()),
        'resource_type': type.StringType(),
    },
    EgressRateLimiter,
    False,
    None))



class EndpointPolicy(VapiStruct):
    """
    Ordered list of Endpoint Rules ordered by sequence number of the entries.
    The maximum number of policies is 25.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'endpoint_rules': 'endpoint_rules',
                            'sequence_number': 'sequence_number',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 endpoint_rules=None,
                 sequence_number=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  endpoint_rules: :class:`list` of :class:`EndpointRule` or ``None``
        :param endpoint_rules: Endpoint Rules that are a part of this EndpointPolicy
        :type  sequence_number: :class:`long` or ``None``
        :param sequence_number: This field is used to resolve conflicts between maps across
            domains. format: int32
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.endpoint_rules = endpoint_rules
        self.sequence_number = sequence_number
        VapiStruct.__init__(self)


EndpointPolicy._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.endpoint_policy', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'endpoint_rules': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'EndpointRule'))),
        'sequence_number': type.OptionalType(type.IntegerType()),
    },
    EndpointPolicy,
    False,
    None))



class EndpointPolicyListResult(VapiStruct):
    """
    Paged Collection of Groups

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`EndpointPolicy` or ``None``
        :param results: Guest Introspection Map list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


EndpointPolicyListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.endpoint_policy_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'EndpointPolicy'))),
    },
    EndpointPolicyListResult,
    False,
    None))



class EndpointRule(VapiStruct):
    """
    Endpoint Rule comes from user configuration. User configures Endpoint Rule
    to specify what services are applied on the groups.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'groups': 'groups',
                            'sequence_number': 'sequence_number',
                            'service_profiles': 'service_profiles',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 groups=None,
                 sequence_number=None,
                 service_profiles=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  groups: :class:`list` of :class:`str` or ``None``
        :param groups: We need paths as duplicate names may exist for groups under
            different domains. In order to specify all groups, use the constant
            \"ANY\". This is case insensitive. If \"ANY\" is used, it should be
            the ONLY element in the group array. Error will be thrown if ANY is
            used in conjunction with other values.
        :type  sequence_number: :class:`long` or ``None``
        :param sequence_number: This field is used to resolve conflicts between multiple entries
            under EndpointPolicy. It will be system default value when not
            specified by user. format: int32
        :type  service_profiles: :class:`list` of :class:`str` or ``None``
        :param service_profiles: The policy paths of service profiles are listed here. It pecifies
            what services are applied on the group. Currently only one is
            allowed.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.groups = groups
        self.sequence_number = sequence_number
        self.service_profiles = service_profiles
        VapiStruct.__init__(self)


EndpointRule._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.endpoint_rule', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'groups': type.OptionalType(type.ListType(type.StringType())),
        'sequence_number': type.OptionalType(type.IntegerType()),
        'service_profiles': type.OptionalType(type.ListType(type.StringType())),
    },
    EndpointRule,
    False,
    None))



class EndpointRuleListResult(VapiStruct):
    """
    Paged Collection of Endpoint Rules

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`EndpointRule` or ``None``
        :param results: Endpoint Rule list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


EndpointRuleListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.endpoint_rule_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'EndpointRule'))),
    },
    EndpointRuleListResult,
    False,
    None))



class EnforcedStatusDetailsNsxt(VapiStruct):
    """
    Detailed Realized Status of an intent object on an NSX-T type of
    enforcement point. This is a detailed view of the Realized Status of an
    intent object from an NSX-T enforcement point perspective.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'enforced_status_info': 'enforced_status_info',
                            'pending_changes_info': 'pending_changes_info',
                            }

    def __init__(self,
                 enforced_status_info=None,
                 pending_changes_info=None,
                ):
        """
        :type  enforced_status_info: :class:`EnforcedStatusInfoNsxt` or ``None``
        :param enforced_status_info: Information about the realized status of the intent on this
            enforcement point. Some very recent changes may be excluded when
            preparing this information, which is indicated by Pending Changes
            Info.
        :type  pending_changes_info: :class:`PendingChangesInfoNsxt` or ``None``
        :param pending_changes_info: Information about pending changes, if any, that aren't reflected in
            the Enforced Realized Status.
        """
        self.enforced_status_info = enforced_status_info
        self.pending_changes_info = pending_changes_info
        VapiStruct.__init__(self)


EnforcedStatusDetailsNsxt._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.enforced_status_details_nsxt', {
        'enforced_status_info': type.OptionalType(type.ReferenceType(__name__, 'EnforcedStatusInfoNsxt')),
        'pending_changes_info': type.OptionalType(type.ReferenceType(__name__, 'PendingChangesInfoNsxt')),
    },
    EnforcedStatusDetailsNsxt,
    False,
    None))



class EnforcedStatusInfoNsxt(VapiStruct):
    """
    Information about the realized status of the intent object on an NSX-T type
    of enforcement point. Some very recent changes may be excluded when
    preparing this information, which is indicated by Pending Changes Info. In
    addition to the realized status across all scopes, this information holds
    details about enforced realized status per scope.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'enforced_status': 'enforced_status',
                            'enforced_status_per_scope': 'enforced_status_per_scope',
                            }

    def __init__(self,
                 enforced_status=None,
                 enforced_status_per_scope=None,
                ):
        """
        :type  enforced_status: :class:`EnforcedStatusNsxt` or ``None``
        :param enforced_status: Consolidated Realized Status of an Intent object across all scopes
            of an NSX-T type of enforcement point.
        :type  enforced_status_per_scope: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param enforced_status_per_scope: List of Enforced Realized Status per Scope.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`EnforcedStatusPerScopeNsxt`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`EnforcedStatusPerScopeNsxt`.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.enforced_status = enforced_status
        self.enforced_status_per_scope = enforced_status_per_scope
        VapiStruct.__init__(self)


EnforcedStatusInfoNsxt._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.enforced_status_info_nsxt', {
        'enforced_status': type.OptionalType(type.ReferenceType(__name__, 'EnforcedStatusNsxt')),
        'enforced_status_per_scope': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'EnforcedStatusPerScopeNsxt')]))),
    },
    EnforcedStatusInfoNsxt,
    False,
    None))



class EnforcedStatusNsxt(VapiStruct):
    """
    NSX-T Enforced Status.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    STATUS_UNINITIALIZED = "UNINITIALIZED"
    """


    """
    STATUS_UNKNOWN = "UNKNOWN"
    """


    """
    STATUS_UP = "UP"
    """


    """
    STATUS_DOWN = "DOWN"
    """


    """
    STATUS_DEGRADED = "DEGRADED"
    """


    """
    STATUS_SUCCESS = "SUCCESS"
    """


    """
    STATUS_FAILURE = "FAILURE"
    """


    """
    STATUS_IN_PROGRESS = "IN_PROGRESS"
    """


    """



    _canonical_to_pep_names = {
                            'status': 'status',
                            'status_message': 'status_message',
                            }

    def __init__(self,
                 status=None,
                 status_message=None,
                ):
        """
        :type  status: :class:`str` or ``None``
        :param status: Possible values are: 
            
            * :attr:`EnforcedStatusNsxt.STATUS_UNINITIALIZED`
            * :attr:`EnforcedStatusNsxt.STATUS_UNKNOWN`
            * :attr:`EnforcedStatusNsxt.STATUS_UP`
            * :attr:`EnforcedStatusNsxt.STATUS_DOWN`
            * :attr:`EnforcedStatusNsxt.STATUS_DEGRADED`
            * :attr:`EnforcedStatusNsxt.STATUS_SUCCESS`
            * :attr:`EnforcedStatusNsxt.STATUS_FAILURE`
            * :attr:`EnforcedStatusNsxt.STATUS_IN_PROGRESS`
            
             Enforced Realized Status.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  status_message: :class:`str` or ``None``
        :param status_message: Status Message conveying hints depending on the status value.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.status = status
        self.status_message = status_message
        VapiStruct.__init__(self)


EnforcedStatusNsxt._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.enforced_status_nsxt', {
        'status': type.OptionalType(type.StringType()),
        'status_message': type.OptionalType(type.StringType()),
    },
    EnforcedStatusNsxt,
    False,
    None))



class EnforcedStatusPerScopeNsxt(VapiStruct):
    """
    NSX-T Detailed Realized Status Per Scope.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "EnforcedStatusPerScopeNsxT"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    RESOURCE_TYPE_TRANSPORTNODESPANENFORCEDSTATUS = "TransportNodeSpanEnforcedStatus"
    """


    """



    _canonical_to_pep_names = {
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 resource_type='EnforcedStatusPerScopeNsxT',
                ):
        """
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`EnforcedStatusPerScopeNsxt.RESOURCE_TYPE_TRANSPORTNODESPANENFORCEDSTATUS`
            
             Enforced Realized Status Per Scope Resource Type.
        """
        self._resource_type = resource_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

EnforcedStatusPerScopeNsxt._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.enforced_status_per_scope_nsxt', {
        'resource_type': type.StringType(),
    },
    EnforcedStatusPerScopeNsxt,
    False,
    None))



class EnforcedStatusPerTransportNode(VapiStruct):
    """
    Detailed Realized Status Per Transport Node.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'display_name': 'display_name',
                            'enforced_status': 'enforced_status',
                            'nsx_id': 'nsx_id',
                            'path': 'path',
                            }

    def __init__(self,
                 display_name=None,
                 enforced_status=None,
                 nsx_id=None,
                 path=None,
                ):
        """
        :type  display_name: :class:`str` or ``None``
        :param display_name: Display name of the transport node.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  enforced_status: :class:`EnforcedStatusNsxt` or ``None``
        :param enforced_status: Realized Status of an Intent object on this Transport Node.
        :type  nsx_id: :class:`str` or ``None``
        :param nsx_id: UUID identifying uniquely the Transport Node.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Policy Path referencing the transport node.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.display_name = display_name
        self.enforced_status = enforced_status
        self.nsx_id = nsx_id
        self.path = path
        VapiStruct.__init__(self)


EnforcedStatusPerTransportNode._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.enforced_status_per_transport_node', {
        'display_name': type.OptionalType(type.StringType()),
        'enforced_status': type.OptionalType(type.ReferenceType(__name__, 'EnforcedStatusNsxt')),
        'nsx_id': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
    },
    EnforcedStatusPerTransportNode,
    False,
    None))



class EnforcementPoint(VapiStruct):
    """
    Enforcement point is the endpoint where policy configurations are applied.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'auto_enforce': 'auto_enforce',
                            'connection_info': 'connection_info',
                            'version': 'version',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 auto_enforce=None,
                 connection_info=None,
                 version=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  auto_enforce: :class:`bool` or ``None``
        :param auto_enforce: Auto enforce flag suggests whether the policy objects shall be
            automatically enforced on this enforcement point or not. When this
            flag is set to true, all policy objects will be automatically
            enforced on this enforcement point. If this flag is set to false,
            user shall rely on the usual means of realization, i.e., deployment
            maps.
        :type  connection_info: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param connection_info: Connection Info of the Enforcement Point.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`EnforcementPointConnectionInfo`. When methods return a
            value of this class as a return value, the attribute will contain
            all the attributes defined in
            :class:`EnforcementPointConnectionInfo`.
        :type  version: :class:`str` or ``None``
        :param version: Version of the Enforcement point.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.auto_enforce = auto_enforce
        self.connection_info = connection_info
        self.version = version
        VapiStruct.__init__(self)


EnforcementPoint._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.enforcement_point', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'auto_enforce': type.OptionalType(type.BooleanType()),
        'connection_info': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'EnforcementPointConnectionInfo')])),
        'version': type.OptionalType(type.StringType()),
    },
    EnforcementPoint,
    False,
    None))



class EnforcementPointConnectionInfo(VapiStruct):
    """
    Contains information required to connect to enforcement point.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "EnforcementPointConnectionInfo"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    RESOURCE_TYPE_NSXTCONNECTIONINFO = "NSXTConnectionInfo"
    """


    """
    RESOURCE_TYPE_NSXVCONNECTIONINFO = "NSXVConnectionInfo"
    """


    """
    RESOURCE_TYPE_CVXCONNECTIONINFO = "CvxConnectionInfo"
    """


    """



    _canonical_to_pep_names = {
                            'enforcement_point_address': 'enforcement_point_address',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 enforcement_point_address=None,
                 resource_type='EnforcementPointConnectionInfo',
                ):
        """
        :type  enforcement_point_address: :class:`str` or ``None``
        :param enforcement_point_address: Value of this property could be Hostname or IP. For instance: - On
            an NSX-T MP running on default port, the value could be
            \"10.192.1.1\" - On an NSX-T MP running on custom port, the value
            could be \"192.168.1.1:32789\" - On an NSX-T MP in VMC deployments,
            the value could be \"192.168.1.1:5480/nsxapi\"
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`EnforcementPointConnectionInfo.RESOURCE_TYPE_NSXTCONNECTIONINFO`
            *
              :attr:`EnforcementPointConnectionInfo.RESOURCE_TYPE_NSXVCONNECTIONINFO`
            *
              :attr:`EnforcementPointConnectionInfo.RESOURCE_TYPE_CVXCONNECTIONINFO`
            
             Resource Type of Enforcement Point Connection Info.
        """
        self.enforcement_point_address = enforcement_point_address
        self._resource_type = resource_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

EnforcementPointConnectionInfo._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.enforcement_point_connection_info', {
        'enforcement_point_address': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
    },
    EnforcementPointConnectionInfo,
    False,
    None))



class EnforcementPointListResult(VapiStruct):
    """
    Paged collection of enforcement points.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`EnforcementPoint` or ``None``
        :param results: Enforcement Point list Results.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


EnforcementPointListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.enforcement_point_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'EnforcementPoint'))),
    },
    EnforcementPointListResult,
    False,
    None))



class EntityInstanceCountConstraintExpression(VapiStruct):
    """
    Represents the leaf level constraint to restrict the number instances of an
    entity type can be created. This is useful in restricting number of CGWs or
    MGWs or Providers that can created in a system.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "EntityInstanceCountConstraintExpression"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'count': 'count',
                            'operator': 'operator',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            }

    def __init__(self,
                 count=None,
                 operator=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='EntityInstanceCountConstraintExpression',
                 tags=None,
                ):
        """
        :type  count: :class:`long` or ``None``
        :param count: Instance count. format: int64
        :type  operator: :class:`str` or ``None``
        :param operator: Operations supported '<' and '<='.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`ConstraintExpression.RESOURCE_TYPE_VALUECONSTRAINTEXPRESSION`
            *
              :attr:`ConstraintExpression.RESOURCE_TYPE_RELATEDATTRIBUTECONDITIONALEXPRESSION`
            *
              :attr:`ConstraintExpression.RESOURCE_TYPE_ENTITYINSTANCECOUNTCONSTRAINTEXPRESSION`
            *
              :attr:`ConstraintExpression.RESOURCE_TYPE_FIELDSANITYCONSTRAINTEXPRESSION`
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        """
        self.count = count
        self.operator = operator
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

EntityInstanceCountConstraintExpression._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.entity_instance_count_constraint_expression', {
        'count': type.OptionalType(type.IntegerType()),
        'operator': type.OptionalType(type.StringType()),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
    },
    EntityInstanceCountConstraintExpression,
    False,
    None))



class ErrorResolverInfo(VapiStruct):
    """
    Metadata related to a given error_id

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'error_id': 'error_id',
                            'resolver_present': 'resolver_present',
                            'user_metadata': 'user_metadata',
                            }

    def __init__(self,
                 error_id=None,
                 resolver_present=None,
                 user_metadata=None,
                ):
        """
        :type  error_id: :class:`long` or ``None``
        :param error_id: The error id for which metadata information is needed format: int64
        :type  resolver_present: :class:`bool` or ``None``
        :param resolver_present: Indicates whether there is a resolver associated with the error or
            not
        :type  user_metadata: :class:`ErrorResolverUserMetadata` or ``None``
        :param user_metadata: User supplied metadata that might be required by the resolver
        """
        self.error_id = error_id
        self.resolver_present = resolver_present
        self.user_metadata = user_metadata
        VapiStruct.__init__(self)


ErrorResolverInfo._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.error_resolver_info', {
        'error_id': type.OptionalType(type.IntegerType()),
        'resolver_present': type.OptionalType(type.BooleanType()),
        'user_metadata': type.OptionalType(type.ReferenceType(__name__, 'ErrorResolverUserMetadata')),
    },
    ErrorResolverInfo,
    False,
    None))



class ErrorResolverInfoList(VapiStruct):
    """
    Collection of all registered ErrorResolverInfo

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'results': 'results',
                            }

    def __init__(self,
                 results=None,
                ):
        """
        :type  results: :class:`list` of :class:`ErrorResolverInfo` or ``None``
        :param results: ErrorResolverInfo list
        """
        self.results = results
        VapiStruct.__init__(self)


ErrorResolverInfoList._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.error_resolver_info_list', {
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ErrorResolverInfo'))),
    },
    ErrorResolverInfoList,
    False,
    None))



class ErrorResolverMetadata(VapiStruct):
    """
    Error along with its metadata

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'entity_id': 'entity_id',
                            'error_id': 'error_id',
                            'system_metadata': 'system_metadata',
                            'user_metadata': 'user_metadata',
                            }

    def __init__(self,
                 entity_id=None,
                 error_id=None,
                 system_metadata=None,
                 user_metadata=None,
                ):
        """
        :type  entity_id: :class:`str` or ``None``
        :param entity_id: The entity/node UUID where the error has occurred.
        :type  error_id: :class:`long` or ``None``
        :param error_id: The error id as reported by the entity where the error occurred.
            format: int64
        :type  system_metadata: :class:`ErrorResolverSystemMetadata` or ``None``
        :param system_metadata: This can come from some external system like syslog collector
        :type  user_metadata: :class:`ErrorResolverUserMetadata` or ``None``
        :param user_metadata: User supplied metadata that might be required by the resolver
        """
        self.entity_id = entity_id
        self.error_id = error_id
        self.system_metadata = system_metadata
        self.user_metadata = user_metadata
        VapiStruct.__init__(self)


ErrorResolverMetadata._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.error_resolver_metadata', {
        'entity_id': type.OptionalType(type.StringType()),
        'error_id': type.OptionalType(type.IntegerType()),
        'system_metadata': type.OptionalType(type.ReferenceType(__name__, 'ErrorResolverSystemMetadata')),
        'user_metadata': type.OptionalType(type.ReferenceType(__name__, 'ErrorResolverUserMetadata')),
    },
    ErrorResolverMetadata,
    False,
    None))



class ErrorResolverMetadataList(VapiStruct):
    """
    List of errors with their metadata

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'errors': 'errors',
                            }

    def __init__(self,
                 errors=None,
                ):
        """
        :type  errors: :class:`list` of :class:`ErrorResolverMetadata` or ``None``
        :param errors: List of errors with their corresponding metadata.
        """
        self.errors = errors
        VapiStruct.__init__(self)


ErrorResolverMetadataList._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.error_resolver_metadata_list', {
        'errors': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ErrorResolverMetadata'))),
    },
    ErrorResolverMetadataList,
    False,
    None))



class ErrorResolverSystemMetadata(VapiStruct):
    """
    Metadata fetched from an external system like Syslog or LogInsight.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'value': 'value',
                            }

    def __init__(self,
                 value=None,
                ):
        """
        :type  value: :class:`str` or ``None``
        :param value: The value fetched from another system
        """
        self.value = value
        VapiStruct.__init__(self)


ErrorResolverSystemMetadata._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.error_resolver_system_metadata', {
        'value': type.OptionalType(type.StringType()),
    },
    ErrorResolverSystemMetadata,
    False,
    None))



class ErrorResolverUserInputData(VapiStruct):
    """
    Corresponds to one property entered by the user

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    DATA_TYPE_TEXT = "TEXT"
    """


    """
    DATA_TYPE_NUMBER = "NUMBER"
    """


    """
    DATA_TYPE_PASSWORD = "PASSWORD"
    """


    """



    _canonical_to_pep_names = {
                            'data_type': 'data_type',
                            'property_name': 'property_name',
                            'property_value': 'property_value',
                            }

    def __init__(self,
                 data_type=None,
                 property_name=None,
                 property_value=None,
                ):
        """
        :type  data_type: :class:`str` or ``None``
        :param data_type: Possible values are: 
            
            * :attr:`ErrorResolverUserInputData.DATA_TYPE_TEXT`
            * :attr:`ErrorResolverUserInputData.DATA_TYPE_NUMBER`
            * :attr:`ErrorResolverUserInputData.DATA_TYPE_PASSWORD`
            
             The datatype of the given property. Useful for data validation
        :type  property_name: :class:`str` or ``None``
        :param property_name: Name of the property supplied by the user
        :type  property_value: :class:`str` or ``None``
        :param property_value: The value associated with the above property
        """
        self.data_type = data_type
        self.property_name = property_name
        self.property_value = property_value
        VapiStruct.__init__(self)


ErrorResolverUserInputData._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.error_resolver_user_input_data', {
        'data_type': type.OptionalType(type.StringType()),
        'property_name': type.OptionalType(type.StringType()),
        'property_value': type.OptionalType(type.StringType()),
    },
    ErrorResolverUserInputData,
    False,
    None))



class ErrorResolverUserMetadata(VapiStruct):
    """
    User supplied metadata needed for resolving errors

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'user_input_list': 'user_input_list',
                            }

    def __init__(self,
                 user_input_list=None,
                ):
        """
        :type  user_input_list: :class:`list` of :class:`ErrorResolverUserInputData` or ``None``
        :param user_input_list: List of user supplied input data.
        """
        self.user_input_list = user_input_list
        VapiStruct.__init__(self)


ErrorResolverUserMetadata._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.error_resolver_user_metadata', {
        'user_input_list': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ErrorResolverUserInputData'))),
    },
    ErrorResolverUserMetadata,
    False,
    None))



class EtherTypeServiceEntry(VapiStruct):
    """
    A ServiceEntry that represents an ethertype protocol

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "EtherTypeServiceEntry"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'ether_type': 'ether_type',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            }

    def __init__(self,
                 ether_type=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='EtherTypeServiceEntry',
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                ):
        """
        :type  ether_type: :class:`long` or ``None``
        :param ether_type: Type of the encapsulated protocol format: int64
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`ServiceEntry.RESOURCE_TYPE_IPPROTOCOLSERVICEENTRY`
            * :attr:`ServiceEntry.RESOURCE_TYPE_IGMPTYPESERVICEENTRY`
            * :attr:`ServiceEntry.RESOURCE_TYPE_ICMPTYPESERVICEENTRY`
            * :attr:`ServiceEntry.RESOURCE_TYPE_ALGTYPESERVICEENTRY`
            * :attr:`ServiceEntry.RESOURCE_TYPE_L4PORTSETSERVICEENTRY`
            * :attr:`ServiceEntry.RESOURCE_TYPE_ETHERTYPESERVICEENTRY`
            * :attr:`ServiceEntry.RESOURCE_TYPE_NESTEDSERVICESERVICEENTRY`
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.ether_type = ether_type
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

EtherTypeServiceEntry._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ether_type_service_entry', {
        'ether_type': type.OptionalType(type.IntegerType()),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
    },
    EtherTypeServiceEntry,
    False,
    None))



class EthernetHeader(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'dst_mac': 'dst_mac',
                            'eth_type': 'eth_type',
                            'src_mac': 'src_mac',
                            }

    def __init__(self,
                 dst_mac=None,
                 eth_type=None,
                 src_mac=None,
                ):
        """
        :type  dst_mac: :class:`str` or ``None``
        :param dst_mac: The destination MAC address of form:
            \"^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$\". For example:
            00:00:00:00:00:00.
        :type  eth_type: :class:`long` or ``None``
        :param eth_type: This field defaults to IPv4. format: int64
        :type  src_mac: :class:`str` or ``None``
        :param src_mac: The source MAC address of form:
            \"^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$\". For example:
            00:00:00:00:00:00.
        """
        self.dst_mac = dst_mac
        self.eth_type = eth_type
        self.src_mac = src_mac
        VapiStruct.__init__(self)


EthernetHeader._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ethernet_header', {
        'dst_mac': type.OptionalType(type.StringType()),
        'eth_type': type.OptionalType(type.IntegerType()),
        'src_mac': type.OptionalType(type.StringType()),
    },
    EthernetHeader,
    False,
    None))



class Evaluation(VapiStruct):
    """
    Criterion Evaluation is the basic logical condition to evaluate whether the
    event could be potentially met.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "Evaluation"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    RESOURCE_TYPE_SOURCEFIELDEVALUATION = "SourceFieldEvaluation"
    """


    """



    _canonical_to_pep_names = {
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 resource_type='Evaluation',
                ):
        """
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`Evaluation.RESOURCE_TYPE_SOURCEFIELDEVALUATION`
            
             Criterion Evaluation resource type.
        """
        self._resource_type = resource_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

Evaluation._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.evaluation', {
        'resource_type': type.StringType(),
    },
    Evaluation,
    False,
    None))



class Event(VapiStruct):
    """
    The Event is the criterion or criteria applied to the source and, when met,
    prompt Policy to run the action. All Reaction Events are constructed with
    reference to the object, the \"source\", that is logically deemed to be the
    object upon which the Event in question initially occurred upon. Some
    example events include: - New object was created. - Change in realization
    state. - Specific API is called.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'criteria': 'criteria',
                            'source': 'source',
                            }

    def __init__(self,
                 criteria=None,
                 source=None,
                ):
        """
        :type  criteria: :class:`list` of :class:`Criterion` or ``None``
        :param criteria: Criteria applied to the source and, if satisfied, would trigger the
            action. Criteria is composed of criterions. In order for the
            Criteria to be met, only one of the criterion must be fulfilled
            (implicit OR).
        :type  source: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param source: Source that is logically deemed to be the \"object\" upon which the
            Event in question initially occurred upon.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`Source`. When methods return a value of this class as a
            return value, the attribute will contain all the attributes defined
            in :class:`Source`.
        """
        self.criteria = criteria
        self.source = source
        VapiStruct.__init__(self)


Event._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.event', {
        'criteria': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Criterion'))),
        'source': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'Source')])),
    },
    Event,
    False,
    None))



class EvpnConfig(VapiStruct):
    """
    Evpn Configuration.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    MODE_INLINE = "INLINE"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'encapsulation_method': 'encapsulation_method',
                            'mode': 'mode',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 encapsulation_method=None,
                 mode=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  encapsulation_method: :class:`EvpnEncapConfig` or ``None``
        :param encapsulation_method: Encapsulation method for EVPN service that is used by the transport
            layer.
        :type  mode: :class:`str` or ``None``
        :param mode: Possible values are: 
            
            * :attr:`EvpnConfig.MODE_INLINE`
            
             EVPN service mode
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.encapsulation_method = encapsulation_method
        self.mode = mode
        VapiStruct.__init__(self)


EvpnConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.evpn_config', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'encapsulation_method': type.OptionalType(type.ReferenceType(__name__, 'EvpnEncapConfig')),
        'mode': type.OptionalType(type.StringType()),
    },
    EvpnConfig,
    False,
    None))



class EvpnEncapConfig(VapiStruct):
    """
    Encapsulation method for EVPN.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'vni_pool_path': 'vni_pool_path',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 vni_pool_path=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  vni_pool_path: :class:`str` or ``None``
        :param vni_pool_path: vni pool path
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.vni_pool_path = vni_pool_path
        VapiStruct.__init__(self)


EvpnEncapConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.evpn_encap_config', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'vni_pool_path': type.OptionalType(type.StringType()),
    },
    EvpnEncapConfig,
    False,
    None))



class EvpnTunnelEndpointConfig(VapiStruct):
    """
    Evpn Tunnel Endpoint Configuration.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'edge_path': 'edge_path',
                            'local_addresses': 'local_addresses',
                            'mtu': 'mtu',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 edge_path=None,
                 local_addresses=None,
                 mtu=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  edge_path: :class:`str` or ``None``
        :param edge_path: edge path
        :type  local_addresses: :class:`list` of :class:`str` or ``None``
        :param local_addresses: local addresses format: ipv4
        :type  mtu: :class:`long` or ``None``
        :param mtu: MTU format: int32
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.edge_path = edge_path
        self.local_addresses = local_addresses
        self.mtu = mtu
        VapiStruct.__init__(self)


EvpnTunnelEndpointConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.evpn_tunnel_endpoint_config', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'edge_path': type.OptionalType(type.StringType()),
        'local_addresses': type.OptionalType(type.ListType(type.StringType())),
        'mtu': type.OptionalType(type.IntegerType()),
    },
    EvpnTunnelEndpointConfig,
    False,
    None))



class EvpnTunnelEndpointConfigListResult(VapiStruct):
    """
    Collection of Evpn Tunnel Endpoint Configuration.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`EvpnTunnelEndpointConfig` or ``None``
        :param results: Evpn Tunnel Endpoint Configuration list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


EvpnTunnelEndpointConfigListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.evpn_tunnel_endpoint_config_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'EvpnTunnelEndpointConfig'))),
    },
    EvpnTunnelEndpointConfigListResult,
    False,
    None))



class Expression(VapiStruct):
    """
    All the nodes of the expression extend from this abstract class. This is
    present for extensibility.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "Expression"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    RESOURCE_TYPE_CONDITION = "Condition"
    """


    """
    RESOURCE_TYPE_CONJUNCTIONOPERATOR = "ConjunctionOperator"
    """


    """
    RESOURCE_TYPE_NESTEDEXPRESSION = "NestedExpression"
    """


    """
    RESOURCE_TYPE_IPADDRESSEXPRESSION = "IPAddressExpression"
    """


    """
    RESOURCE_TYPE_MACADDRESSEXPRESSION = "MACAddressExpression"
    """


    """
    RESOURCE_TYPE_EXTERNALIDEXPRESSION = "ExternalIDExpression"
    """


    """
    RESOURCE_TYPE_PATHEXPRESSION = "PathExpression"
    """


    """
    RESOURCE_TYPE_IDENTITYGROUPEXPRESSION = "IdentityGroupExpression"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='Expression',
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`Expression.RESOURCE_TYPE_CONDITION`
            * :attr:`Expression.RESOURCE_TYPE_CONJUNCTIONOPERATOR`
            * :attr:`Expression.RESOURCE_TYPE_NESTEDEXPRESSION`
            * :attr:`Expression.RESOURCE_TYPE_IPADDRESSEXPRESSION`
            * :attr:`Expression.RESOURCE_TYPE_MACADDRESSEXPRESSION`
            * :attr:`Expression.RESOURCE_TYPE_EXTERNALIDEXPRESSION`
            * :attr:`Expression.RESOURCE_TYPE_PATHEXPRESSION`
            * :attr:`Expression.RESOURCE_TYPE_IDENTITYGROUPEXPRESSION`
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

Expression._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.expression', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
    },
    Expression,
    False,
    None))



class ExternalIDExpression(VapiStruct):
    """
    Represents external ID expressions in the form of an array, to support
    addition of objects like virtual interfaces, virtual machines,
    CloudNativeServiceInstance PhysicalServer to a group.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ExternalIDExpression"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    MEMBER_TYPE_VIRTUALMACHINE = "VirtualMachine"
    """


    """
    MEMBER_TYPE_VIRTUALNETWORKINTERFACE = "VirtualNetworkInterface"
    """


    """
    MEMBER_TYPE_CLOUDNATIVESERVICEINSTANCE = "CloudNativeServiceInstance"
    """


    """
    MEMBER_TYPE_PHYSICALSERVER = "PhysicalServer"
    """


    """



    _canonical_to_pep_names = {
                            'external_ids': 'external_ids',
                            'member_type': 'member_type',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            }

    def __init__(self,
                 external_ids=None,
                 member_type=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ExternalIDExpression',
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                ):
        """
        :type  external_ids: :class:`list` of :class:`str` or ``None``
        :param external_ids: This array can consist of one or more external IDs for the
            specified member type.
        :type  member_type: :class:`str` or ``None``
        :param member_type: Possible values are: 
            
            * :attr:`ExternalIDExpression.MEMBER_TYPE_VIRTUALMACHINE`
            * :attr:`ExternalIDExpression.MEMBER_TYPE_VIRTUALNETWORKINTERFACE`
            *
              :attr:`ExternalIDExpression.MEMBER_TYPE_CLOUDNATIVESERVICEINSTANCE`
            * :attr:`ExternalIDExpression.MEMBER_TYPE_PHYSICALSERVER`
            
             External ID member type
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`Expression.RESOURCE_TYPE_CONDITION`
            * :attr:`Expression.RESOURCE_TYPE_CONJUNCTIONOPERATOR`
            * :attr:`Expression.RESOURCE_TYPE_NESTEDEXPRESSION`
            * :attr:`Expression.RESOURCE_TYPE_IPADDRESSEXPRESSION`
            * :attr:`Expression.RESOURCE_TYPE_MACADDRESSEXPRESSION`
            * :attr:`Expression.RESOURCE_TYPE_EXTERNALIDEXPRESSION`
            * :attr:`Expression.RESOURCE_TYPE_PATHEXPRESSION`
            * :attr:`Expression.RESOURCE_TYPE_IDENTITYGROUPEXPRESSION`
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.external_ids = external_ids
        self.member_type = member_type
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ExternalIDExpression._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.external_ID_expression', {
        'external_ids': type.OptionalType(type.ListType(type.StringType())),
        'member_type': type.OptionalType(type.StringType()),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
    },
    ExternalIDExpression,
    False,
    None))



class FIPSGlobalConfig(VapiStruct):
    """
    Global configuration

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'lb_fips_enabled': 'lb_fips_enabled',
                            }

    def __init__(self,
                 lb_fips_enabled=None,
                ):
        """
        :type  lb_fips_enabled: :class:`bool` or ``None``
        :param lb_fips_enabled: When this flag is set to true FIPS mode will be set on ssl
            encryptions of load balancer feature.
        """
        self.lb_fips_enabled = lb_fips_enabled
        VapiStruct.__init__(self)


FIPSGlobalConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.FIPS_global_config', {
        'lb_fips_enabled': type.OptionalType(type.BooleanType()),
    },
    FIPSGlobalConfig,
    False,
    None))



class FeaturePermission(VapiStruct):
    """
    Feature Permission

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    PERMISSION_CRUD = "crud"
    """


    """
    PERMISSION_READ = "read"
    """


    """
    PERMISSION_EXECUTE = "execute"
    """


    """
    PERMISSION_NONE = "none"
    """


    """



    _canonical_to_pep_names = {
                            'feature': 'feature',
                            'feature_description': 'feature_description',
                            'feature_name': 'feature_name',
                            'is_execute_recommended': 'is_execute_recommended',
                            'is_internal': 'is_internal',
                            'permission': 'permission',
                            }

    def __init__(self,
                 feature=None,
                 feature_description=None,
                 feature_name=None,
                 is_execute_recommended=None,
                 is_internal=None,
                 permission=None,
                ):
        """
        :type  feature: :class:`str` or ``None``
        :param feature: Feature Id
        :type  feature_description: :class:`str` or ``None``
        :param feature_description: Feature Description
        :type  feature_name: :class:`str` or ``None``
        :param feature_name: Feature Name
        :type  is_execute_recommended: :class:`bool` or ``None``
        :param is_execute_recommended: Is execute recommended
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  is_internal: :class:`bool` or ``None``
        :param is_internal: Is internal
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  permission: :class:`str` or ``None``
        :param permission: Possible values are: 
            
            * :attr:`FeaturePermission.PERMISSION_CRUD`
            * :attr:`FeaturePermission.PERMISSION_READ`
            * :attr:`FeaturePermission.PERMISSION_EXECUTE`
            * :attr:`FeaturePermission.PERMISSION_NONE`
            
             Permission
        """
        self.feature = feature
        self.feature_description = feature_description
        self.feature_name = feature_name
        self.is_execute_recommended = is_execute_recommended
        self.is_internal = is_internal
        self.permission = permission
        VapiStruct.__init__(self)


FeaturePermission._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.feature_permission', {
        'feature': type.OptionalType(type.StringType()),
        'feature_description': type.OptionalType(type.StringType()),
        'feature_name': type.OptionalType(type.StringType()),
        'is_execute_recommended': type.OptionalType(type.BooleanType()),
        'is_internal': type.OptionalType(type.BooleanType()),
        'permission': type.OptionalType(type.StringType()),
    },
    FeaturePermission,
    False,
    None))



class FederationComponentUpgradeStatus(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    STATUS_SUCCESS = "SUCCESS"
    """


    """
    STATUS_FAILED = "FAILED"
    """


    """
    STATUS_IN_PROGRESS = "IN_PROGRESS"
    """


    """
    STATUS_NOT_STARTED = "NOT_STARTED"
    """


    """
    STATUS_PAUSED = "PAUSED"
    """


    """



    _canonical_to_pep_names = {
                            'component_type': 'component_type',
                            'current_version_node_summary': 'current_version_node_summary',
                            'details': 'details',
                            'percent_complete': 'percent_complete',
                            'status': 'status',
                            'target_version': 'target_version',
                            }

    def __init__(self,
                 component_type=None,
                 current_version_node_summary=None,
                 details=None,
                 percent_complete=None,
                 status=None,
                 target_version=None,
                ):
        """
        :type  component_type: :class:`str` or ``None``
        :param component_type: Component type for the upgrade status
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  current_version_node_summary: :class:`list` of :class:`FederationNodeSummary` or ``None``
        :param current_version_node_summary: Mapping of current versions of nodes and counts of nodes at the
            respective versions.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  details: :class:`str` or ``None``
        :param details: Details about the upgrade status
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  percent_complete: :class:`float` or ``None``
        :param percent_complete: Indicator of upgrade progress in percentage
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  status: :class:`str` or ``None``
        :param status: Possible values are: 
            
            * :attr:`FederationComponentUpgradeStatus.STATUS_SUCCESS`
            * :attr:`FederationComponentUpgradeStatus.STATUS_FAILED`
            * :attr:`FederationComponentUpgradeStatus.STATUS_IN_PROGRESS`
            * :attr:`FederationComponentUpgradeStatus.STATUS_NOT_STARTED`
            * :attr:`FederationComponentUpgradeStatus.STATUS_PAUSED`
            
             Upgrade status of component
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  target_version: :class:`str` or ``None``
        :param target_version: Target component version
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.component_type = component_type
        self.current_version_node_summary = current_version_node_summary
        self.details = details
        self.percent_complete = percent_complete
        self.status = status
        self.target_version = target_version
        VapiStruct.__init__(self)


FederationComponentUpgradeStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.federation_component_upgrade_status', {
        'component_type': type.OptionalType(type.StringType()),
        'current_version_node_summary': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'FederationNodeSummary'))),
        'details': type.OptionalType(type.StringType()),
        'percent_complete': type.OptionalType(type.DoubleType()),
        'status': type.OptionalType(type.StringType()),
        'target_version': type.OptionalType(type.StringType()),
    },
    FederationComponentUpgradeStatus,
    False,
    None))



class FederationConfig(VapiStruct):
    """
    Global Manager federation configuration. This configuration is distributed
    to all Sites participating in federation.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'site_config': 'site_config',
                            }

    def __init__(self,
                 site_config=None,
                ):
        """
        :type  site_config: :class:`list` of :class:`SiteFederationConfig` or ``None``
        :param site_config: Federation configurations of all Sites
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.site_config = site_config
        VapiStruct.__init__(self)


FederationConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.federation_config', {
        'site_config': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'SiteFederationConfig'))),
    },
    FederationConfig,
    False,
    None))



class FederationConnectivityConfig(VapiStruct):
    """
    Additional configuration required for federation.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'global_overlay_id': 'global_overlay_id',
                            }

    def __init__(self,
                 global_overlay_id=None,
                ):
        """
        :type  global_overlay_id: :class:`long` or ``None``
        :param global_overlay_id: Global id for by Layer3 services for federation usecases. format:
            int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.global_overlay_id = global_overlay_id
        VapiStruct.__init__(self)


FederationConnectivityConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.federation_connectivity_config', {
        'global_overlay_id': type.OptionalType(type.IntegerType()),
    },
    FederationConnectivityConfig,
    False,
    None))



class FederationGatewayConfig(VapiStruct):
    """
    Additional gateway configuration required for federation

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'global_overlay_id': 'global_overlay_id',
                            'site_allocation_indices': 'site_allocation_indices',
                            'transit_segment_id': 'transit_segment_id',
                            }

    def __init__(self,
                 global_overlay_id=None,
                 site_allocation_indices=None,
                 transit_segment_id=None,
                ):
        """
        :type  global_overlay_id: :class:`long` or ``None``
        :param global_overlay_id: Global id for by Layer3 services for federation usecases. format:
            int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  site_allocation_indices: :class:`list` of :class:`SiteAllocationIndexForEdge` or ``None``
        :param site_allocation_indices: Indicies for cross site allocation for edge cluster and its members
            referred by gateway.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  transit_segment_id: :class:`str` or ``None``
        :param transit_segment_id: Global UUID for transit segment id to be used by Layer2 services
            for federation usecases.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.global_overlay_id = global_overlay_id
        self.site_allocation_indices = site_allocation_indices
        self.transit_segment_id = transit_segment_id
        VapiStruct.__init__(self)


FederationGatewayConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.federation_gateway_config', {
        'global_overlay_id': type.OptionalType(type.IntegerType()),
        'site_allocation_indices': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'SiteAllocationIndexForEdge'))),
        'transit_segment_id': type.OptionalType(type.StringType()),
    },
    FederationGatewayConfig,
    False,
    None))



class FederationNodeSummary(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'node_count': 'node_count',
                            'version': 'version',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 node_count=None,
                 version=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  node_count: :class:`long` or ``None``
        :param node_count: Number of nodes of the type and at the component version. format:
            int32
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  version: :class:`str` or ``None``
        :param version: Component version
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.node_count = node_count
        self.version = version
        VapiStruct.__init__(self)


FederationNodeSummary._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.federation_node_summary', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'node_count': type.OptionalType(type.IntegerType()),
        'version': type.OptionalType(type.StringType()),
    },
    FederationNodeSummary,
    False,
    None))



class FederationUpgradeSummary(VapiStruct):
    """
    Provides upgrade summary for a specific site.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    OVERALL_UPGRADE_STATUS_SUCCESS = "SUCCESS"
    """


    """
    OVERALL_UPGRADE_STATUS_FAILED = "FAILED"
    """


    """
    OVERALL_UPGRADE_STATUS_IN_PROGRESS = "IN_PROGRESS"
    """


    """
    OVERALL_UPGRADE_STATUS_NOT_STARTED = "NOT_STARTED"
    """


    """
    OVERALL_UPGRADE_STATUS_PAUSED = "PAUSED"
    """


    """
    SITE_TYPE_ACTIVE_GM_SITE = "ACTIVE_GM_SITE"
    """


    """
    SITE_TYPE_STANDBY_GM_SITE = "STANDBY_GM_SITE"
    """


    """
    SITE_TYPE_NON_GM_SITE = "NON_GM_SITE"
    """


    """



    _canonical_to_pep_names = {
                            'component_status': 'component_status',
                            'current_version': 'current_version',
                            'gpm_name': 'gpm_name',
                            'id': 'id',
                            'last_upgrade_timestamp': 'last_upgrade_timestamp',
                            'name': 'name',
                            'overall_upgrade_status': 'overall_upgrade_status',
                            'site_id': 'site_id',
                            'site_ip': 'site_ip',
                            'site_type': 'site_type',
                            'target_version': 'target_version',
                            }

    def __init__(self,
                 component_status=None,
                 current_version=None,
                 gpm_name=None,
                 id=None,
                 last_upgrade_timestamp=None,
                 name=None,
                 overall_upgrade_status=None,
                 site_id=None,
                 site_ip=None,
                 site_type=None,
                 target_version=None,
                ):
        """
        :type  component_status: :class:`list` of :class:`FederationComponentUpgradeStatus` or ``None``
        :param component_status: List of component statuses
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  current_version: :class:`str` or ``None``
        :param current_version: This is NSX version for the site.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  gpm_name: :class:`str` or ``None``
        :param gpm_name: Name of the global manager if present.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_upgrade_timestamp: :class:`str` or ``None``
        :param last_upgrade_timestamp: Indicates the time when the site was upgraded.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  name: :class:`str` or ``None``
        :param name: Name of the site.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overall_upgrade_status: :class:`str` or ``None``
        :param overall_upgrade_status: Possible values are: 
            
            * :attr:`FederationUpgradeSummary.OVERALL_UPGRADE_STATUS_SUCCESS`
            * :attr:`FederationUpgradeSummary.OVERALL_UPGRADE_STATUS_FAILED`
            *
              :attr:`FederationUpgradeSummary.OVERALL_UPGRADE_STATUS_IN_PROGRESS`
            *
              :attr:`FederationUpgradeSummary.OVERALL_UPGRADE_STATUS_NOT_STARTED`
            * :attr:`FederationUpgradeSummary.OVERALL_UPGRADE_STATUS_PAUSED`
            
             Status of upgrade
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  site_id: :class:`str` or ``None``
        :param site_id: This is the Site Manager generated UUID for every NSX deployment.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  site_ip: :class:`str` or ``None``
        :param site_ip: IP address of the site.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  site_type: :class:`str` or ``None``
        :param site_type: Possible values are: 
            
            * :attr:`FederationUpgradeSummary.SITE_TYPE_ACTIVE_GM_SITE`
            * :attr:`FederationUpgradeSummary.SITE_TYPE_STANDBY_GM_SITE`
            * :attr:`FederationUpgradeSummary.SITE_TYPE_NON_GM_SITE`
            
             Type of this site.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  target_version: :class:`str` or ``None``
        :param target_version: This is NSX target version for the site, if it is undergoing
            upgrade.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.component_status = component_status
        self.current_version = current_version
        self.gpm_name = gpm_name
        self.id = id
        self.last_upgrade_timestamp = last_upgrade_timestamp
        self.name = name
        self.overall_upgrade_status = overall_upgrade_status
        self.site_id = site_id
        self.site_ip = site_ip
        self.site_type = site_type
        self.target_version = target_version
        VapiStruct.__init__(self)


FederationUpgradeSummary._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.federation_upgrade_summary', {
        'component_status': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'FederationComponentUpgradeStatus'))),
        'current_version': type.OptionalType(type.StringType()),
        'gpm_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'last_upgrade_timestamp': type.OptionalType(type.StringType()),
        'name': type.OptionalType(type.StringType()),
        'overall_upgrade_status': type.OptionalType(type.StringType()),
        'site_id': type.OptionalType(type.StringType()),
        'site_ip': type.OptionalType(type.StringType()),
        'site_type': type.OptionalType(type.StringType()),
        'target_version': type.OptionalType(type.StringType()),
    },
    FederationUpgradeSummary,
    False,
    None))



class FederationUpgradeSummaryListResult(VapiStruct):
    """
    Paged Collection of site upgrade information

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`FederationUpgradeSummary` or ``None``
        :param results: Paged collection of site upgrade information
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


FederationUpgradeSummaryListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.federation_upgrade_summary_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'FederationUpgradeSummary'))),
    },
    FederationUpgradeSummaryListResult,
    False,
    None))



class FieldSanityConstraintExpression(VapiStruct):
    """
    Represents the field value constraint to constrain specified field value
    based on defined sanity checks. Example - For DNS.upstream_servers, all the
    IP addresses must either be public or private. { \"target\": {
    \"target_resource_type\": \"DnsForwarderZone\", \"attribute\":
    \"upstreamServers\", \"path_prefix\": \"/infra/dns-forwarder-zones/\" },
    \"constraint_expression\": { \"resource_type\":
    \"FieldSanityConstraintExpression\", \"operator\": \"OR\", \"checks\":
    [\"ALL_PUBLIC_IPS\", \"ALL_PRIVATE_IPS\"] } }

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "FieldSanityConstraintExpression"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    CHECKS_PUBLIC_IPS = "ALL_PUBLIC_IPS"
    """


    """
    CHECKS_PRIVATE_IPS = "ALL_PRIVATE_IPS"
    """


    """
    OPERATOR_OR = "OR"
    """


    """
    OPERATOR_AND = "AND"
    """


    """



    _canonical_to_pep_names = {
                            'checks': 'checks',
                            'operator': 'operator',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            }

    def __init__(self,
                 checks=None,
                 operator=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='FieldSanityConstraintExpression',
                 tags=None,
                ):
        """
        :type  checks: :class:`list` of :class:`str` or ``None``
        :param checks: Possible values are: 
            
            * :attr:`FieldSanityConstraintExpression.CHECKS_PUBLIC_IPS`
            * :attr:`FieldSanityConstraintExpression.CHECKS_PRIVATE_IPS`
            
             List of sanity checks.
        :type  operator: :class:`str` or ``None``
        :param operator: Possible values are: 
            
            * :attr:`FieldSanityConstraintExpression.OPERATOR_OR`
            * :attr:`FieldSanityConstraintExpression.OPERATOR_AND`
            
             A conditional operator
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`ConstraintExpression.RESOURCE_TYPE_VALUECONSTRAINTEXPRESSION`
            *
              :attr:`ConstraintExpression.RESOURCE_TYPE_RELATEDATTRIBUTECONDITIONALEXPRESSION`
            *
              :attr:`ConstraintExpression.RESOURCE_TYPE_ENTITYINSTANCECOUNTCONSTRAINTEXPRESSION`
            *
              :attr:`ConstraintExpression.RESOURCE_TYPE_FIELDSANITYCONSTRAINTEXPRESSION`
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        """
        self.checks = checks
        self.operator = operator
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

FieldSanityConstraintExpression._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.field_sanity_constraint_expression', {
        'checks': type.OptionalType(type.ListType(type.StringType())),
        'operator': type.OptionalType(type.StringType()),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
    },
    FieldSanityConstraintExpression,
    False,
    None))



class FieldSetting(VapiStruct):
    """
    Field Setting.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'field_pointer': 'field_pointer',
                            'value': 'value',
                            }

    def __init__(self,
                 field_pointer=None,
                 value=None,
                ):
        """
        :type  field_pointer: :class:`str` or ``None``
        :param field_pointer: Field Pointer.
        :type  value: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param value: Value that the field must be set to.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`FieldSettingValue`. When methods return a value of this
            class as a return value, the attribute will contain all the
            attributes defined in :class:`FieldSettingValue`.
        """
        self.field_pointer = field_pointer
        self.value = value
        VapiStruct.__init__(self)


FieldSetting._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.field_setting', {
        'field_pointer': type.OptionalType(type.StringType()),
        'value': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'FieldSettingValue')])),
    },
    FieldSetting,
    False,
    None))



class FieldSettingValue(VapiStruct):
    """
    Field Setting Value.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "FieldSettingValue"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    RESOURCE_TYPE_CONSTANTFIELDVALUE = "ConstantFieldValue"
    """


    """



    _canonical_to_pep_names = {
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 resource_type='FieldSettingValue',
                ):
        """
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`FieldSettingValue.RESOURCE_TYPE_CONSTANTFIELDVALUE`
            
             Field Setting Value resource type.
        """
        self._resource_type = resource_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

FieldSettingValue._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.field_setting_value', {
        'resource_type': type.StringType(),
    },
    FieldSettingValue,
    False,
    None))



class FieldsPacketData(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "FieldsPacketData"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'arp_header': 'arp_header',
                            'eth_header': 'eth_header',
                            'ip_header': 'ip_header',
                            'ipv6_header': 'ipv6_header',
                            'payload': 'payload',
                            'transport_header': 'transport_header',
                            'frame_size': 'frame_size',
                            'resource_type': 'resource_type',
                            'routed': 'routed',
                            'transport_type': 'transport_type',
                            }

    def __init__(self,
                 arp_header=None,
                 eth_header=None,
                 ip_header=None,
                 ipv6_header=None,
                 payload=None,
                 transport_header=None,
                 frame_size=None,
                 resource_type='FieldsPacketData',
                 routed=None,
                 transport_type=None,
                ):
        """
        :type  arp_header: :class:`ArpHeader` or ``None``
        :param arp_header: The ARP header
        :type  eth_header: :class:`EthernetHeader` or ``None``
        :param eth_header: The ethernet header
        :type  ip_header: :class:`Ipv4Header` or ``None``
        :param ip_header: The IPv4 header
        :type  ipv6_header: :class:`Ipv6Header` or ``None``
        :param ipv6_header: The IPv6 header
        :type  payload: :class:`str` or ``None``
        :param payload: Up to 1000 bytes of payload may be supplied (with a base64-encoded
            length of 1336 bytes.) Additional bytes of traceflow metadata will
            be appended to the payload. The payload contains any data the user
            wants to put after the transport header.
        :type  transport_header: :class:`TransportProtocolHeader` or ``None``
        :param transport_header: This field contains a protocol that is above IP. It is not
            restricted to the 'transport' defined by the OSI model (e.g., ICMP
            is supported).
        :type  frame_size: :class:`long` or ``None``
        :param frame_size: If the requested frame_size is too small (given the payload and
            traceflow metadata requirement of 16 bytes), the traceflow request
            will fail with an appropriate message. The frame will be zero
            padded to the requested size. format: int64
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`PacketData.RESOURCE_TYPE_BINARYPACKETDATA`
            * :attr:`PacketData.RESOURCE_TYPE_FIELDSPACKETDATA`
            
             Packet configuration
        :type  routed: :class:`bool` or ``None``
        :param routed: A flag, when set true, indicates that the traceflow packet is of L3
            routing.
        :type  transport_type: :class:`str` or ``None``
        :param transport_type: Possible values are: 
            
            * :attr:`PacketData.TRANSPORT_TYPE_BROADCAST`
            * :attr:`PacketData.TRANSPORT_TYPE_UNICAST`
            * :attr:`PacketData.TRANSPORT_TYPE_MULTICAST`
            * :attr:`PacketData.TRANSPORT_TYPE_UNKNOWN`
            
             transport type of the traceflow packet
        """
        self.arp_header = arp_header
        self.eth_header = eth_header
        self.ip_header = ip_header
        self.ipv6_header = ipv6_header
        self.payload = payload
        self.transport_header = transport_header
        self.frame_size = frame_size
        self._resource_type = resource_type
        self.routed = routed
        self.transport_type = transport_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

FieldsPacketData._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.fields_packet_data', {
        'arp_header': type.OptionalType(type.ReferenceType(__name__, 'ArpHeader')),
        'eth_header': type.OptionalType(type.ReferenceType(__name__, 'EthernetHeader')),
        'ip_header': type.OptionalType(type.ReferenceType(__name__, 'Ipv4Header')),
        'ipv6_header': type.OptionalType(type.ReferenceType(__name__, 'Ipv6Header')),
        'payload': type.OptionalType(type.StringType()),
        'transport_header': type.OptionalType(type.ReferenceType(__name__, 'TransportProtocolHeader')),
        'frame_size': type.OptionalType(type.IntegerType()),
        'resource_type': type.StringType(),
        'routed': type.OptionalType(type.BooleanType()),
        'transport_type': type.OptionalType(type.StringType()),
    },
    FieldsPacketData,
    False,
    None))



class FileTransferAuthenticationScheme(VapiStruct):
    """
    Remote server authentication details

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    SCHEME_NAME_PASSWORD = "PASSWORD"
    """


    """



    _canonical_to_pep_names = {
                            'password': 'password',
                            'scheme_name': 'scheme_name',
                            'username': 'username',
                            }

    def __init__(self,
                 password=None,
                 scheme_name=None,
                 username=None,
                ):
        """
        :type  password: :class:`str` or ``None``
        :param password: Password to authenticate with
        :type  scheme_name: :class:`str` or ``None``
        :param scheme_name: Possible values are: 
            
            * :attr:`FileTransferAuthenticationScheme.SCHEME_NAME_PASSWORD`
            
             Authentication scheme name
        :type  username: :class:`str` or ``None``
        :param username: User name to authenticate with
        """
        self.password = password
        self.scheme_name = scheme_name
        self.username = username
        VapiStruct.__init__(self)


FileTransferAuthenticationScheme._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.file_transfer_authentication_scheme', {
        'password': type.OptionalType(type.StringType()),
        'scheme_name': type.OptionalType(type.StringType()),
        'username': type.OptionalType(type.StringType()),
    },
    FileTransferAuthenticationScheme,
    False,
    None))



class FileTransferProtocol(VapiStruct):
    """
    Protocol to transfer backup file to remote server

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    PROTOCOL_NAME_SFTP = "sftp"
    """


    """



    _canonical_to_pep_names = {
                            'authentication_scheme': 'authentication_scheme',
                            'protocol_name': 'protocol_name',
                            'ssh_fingerprint': 'ssh_fingerprint',
                            }

    def __init__(self,
                 authentication_scheme=None,
                 protocol_name=None,
                 ssh_fingerprint=None,
                ):
        """
        :type  authentication_scheme: :class:`FileTransferAuthenticationScheme` or ``None``
        :param authentication_scheme: Scheme to authenticate if required
        :type  protocol_name: :class:`str` or ``None``
        :param protocol_name: Possible values are: 
            
            * :attr:`FileTransferProtocol.PROTOCOL_NAME_SFTP`
            
             Protocol name
        :type  ssh_fingerprint: :class:`str` or ``None``
        :param ssh_fingerprint: The expected SSH fingerprint of the server. If the server's
            fingerprint does not match this fingerprint, the connection will be
            terminated. Only ECDSA fingerprints hashed with SHA256 are
            supported. To obtain the host's ssh fingerprint, you should connect
            via some method other than SSH to obtain this information. You can
            use one of these commands to view the key's fingerprint: 1.
            ssh-keygen -l -E sha256 -f ssh_host_ecdsa_key.pub 2. awk '{print
            $2}' ssh_host_ecdsa_key.pub | base64 -d | sha256sum -b | sed 's/
            .\*$//' | xxd -r -p | base64 | sed 's/.//44g' | awk '{print
            \"SHA256:\"$1}'
        """
        self.authentication_scheme = authentication_scheme
        self.protocol_name = protocol_name
        self.ssh_fingerprint = ssh_fingerprint
        VapiStruct.__init__(self)


FileTransferProtocol._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.file_transfer_protocol', {
        'authentication_scheme': type.OptionalType(type.ReferenceType(__name__, 'FileTransferAuthenticationScheme')),
        'protocol_name': type.OptionalType(type.StringType()),
        'ssh_fingerprint': type.OptionalType(type.StringType()),
    },
    FileTransferProtocol,
    False,
    None))



class FilterWidgetConfiguration(VapiStruct):
    """
    Represents configuration for filter widget. This is abstract representation
    of filter widget.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "FilterWidgetConfiguration"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'alias': 'alias',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'datasources': 'datasources',
                            'default_filter_value': 'default_filter_value',
                            'drilldown_id': 'drilldown_id',
                            'filter': 'filter',
                            'filter_value_required': 'filter_value_required',
                            'footer': 'footer',
                            'icons': 'icons',
                            'is_drilldown': 'is_drilldown',
                            'legend': 'legend',
                            'shared': 'shared',
                            'span': 'span',
                            'weight': 'weight',
                            }

    def __init__(self,
                 alias=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='FilterWidgetConfiguration',
                 tags=None,
                 datasources=None,
                 default_filter_value=None,
                 drilldown_id=None,
                 filter=None,
                 filter_value_required=None,
                 footer=None,
                 icons=None,
                 is_drilldown=None,
                 legend=None,
                 shared=None,
                 span=None,
                 weight=None,
                ):
        """
        :type  alias: :class:`str` or ``None``
        :param alias: Alias to be used when emitting filter value.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Title of the widget. If display_name is omitted, the widget will be
            shown without a title.
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`WidgetConfiguration.RESOURCE_TYPE_LABELVALUECONFIGURATION`
            * :attr:`WidgetConfiguration.RESOURCE_TYPE_DONUTCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_MULTIWIDGETCONFIGURATION`
            * :attr:`WidgetConfiguration.RESOURCE_TYPE_CONTAINERCONFIGURATION`
            * :attr:`WidgetConfiguration.RESOURCE_TYPE_STATSCONFIGURATION`
            * :attr:`WidgetConfiguration.RESOURCE_TYPE_GRIDCONFIGURATION`
            * :attr:`WidgetConfiguration.RESOURCE_TYPE_GRAPHCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_CUSTOMWIDGETCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_DROPDOWNFILTERWIDGETCONFIGURATION`
            
            Supported visualization types are LabelValueConfiguration,
            DonutConfiguration, GridConfiguration, StatsConfiguration,
            MultiWidgetConfiguration, GraphConfiguration,
            ContainerConfiguration, CustomWidgetConfiguration and
            DropdownFilterWidgetConfiguration.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  datasources: :class:`list` of :class:`Datasource` or ``None``
        :param datasources: The 'datasources' represent the sources from which data will be
            fetched. Currently, only NSX-API is supported as a 'default'
            datasource. An example of specifying 'default' datasource along
            with the urls to fetch data from is given at 'example_request'
            section of 'CreateWidgetConfiguration' API.
        :type  default_filter_value: :class:`list` of :class:`DefaultFilterValue` or ``None``
        :param default_filter_value: Default filter values to be passed to datasources. This will be
            used when the report is requested without filter values.
        :type  drilldown_id: :class:`str` or ``None``
        :param drilldown_id: Id of drilldown widget, if any. Id should be a valid id of an
            existing widget. A widget is considered as drilldown widget when it
            is associated with any other widget and provides more detailed
            information about any data item from the parent widget.
        :type  filter: :class:`str` or ``None``
        :param filter: Id of filter widget for subscription, if any. Id should be a valid
            id of an existing filter widget. Filter widget should be from the
            same view. Datasource URLs should have placeholder values equal to
            filter alias to accept the filter value on filter change.
        :type  filter_value_required: :class:`bool` or ``None``
        :param filter_value_required: Flag to indicate that widget will continue to work without filter
            value. If this flag is set to false then default_filter_value is
            manadatory.
        :type  footer: :class:`Footer` or ``None``
        :param footer: 
        :type  icons: :class:`list` of :class:`Icon` or ``None``
        :param icons: Icons to be applied at dashboard for widgets and UI elements.
        :type  is_drilldown: :class:`bool` or ``None``
        :param is_drilldown: Set to true if this widget should be used as a drilldown.
        :type  legend: :class:`Legend` or ``None``
        :param legend: Legend to be displayed. If legend is not needed, do not include it.
        :type  shared: :class:`bool` or ``None``
        :param shared: Please use the property 'shared' of View instead of this. The
            widgets of a shared view are visible to other users.
        :type  span: :class:`long` or ``None``
        :param span: Represents the horizontal span of the widget / container. format:
            int32
        :type  weight: :class:`long` or ``None``
        :param weight: Specify relavite weight in WidgetItem for placement in a view.
            Please see WidgetItem for details. format: int32
        """
        self.alias = alias
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.datasources = datasources
        self.default_filter_value = default_filter_value
        self.drilldown_id = drilldown_id
        self.filter = filter
        self.filter_value_required = filter_value_required
        self.footer = footer
        self.icons = icons
        self.is_drilldown = is_drilldown
        self.legend = legend
        self.shared = shared
        self.span = span
        self.weight = weight
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

FilterWidgetConfiguration._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.filter_widget_configuration', {
        'alias': type.OptionalType(type.StringType()),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'datasources': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Datasource'))),
        'default_filter_value': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'DefaultFilterValue'))),
        'drilldown_id': type.OptionalType(type.StringType()),
        'filter': type.OptionalType(type.StringType()),
        'filter_value_required': type.OptionalType(type.BooleanType()),
        'footer': type.OptionalType(type.ReferenceType(__name__, 'Footer')),
        'icons': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Icon'))),
        'is_drilldown': type.OptionalType(type.BooleanType()),
        'legend': type.OptionalType(type.ReferenceType(__name__, 'Legend')),
        'shared': type.OptionalType(type.BooleanType()),
        'span': type.OptionalType(type.IntegerType()),
        'weight': type.OptionalType(type.IntegerType()),
    },
    FilterWidgetConfiguration,
    False,
    None))



class FirewallConfiguration(VapiStruct):
    """
    Firewall related configurations

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "FirewallConfiguration"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    RESOURCE_TYPE_DFWFIREWALLCONFIGURATION = "DfwFirewallConfiguration"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'disable_auto_drafts': 'disable_auto_drafts',
                            'enable_firewall': 'enable_firewall',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='FirewallConfiguration',
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 disable_auto_drafts=None,
                 enable_firewall=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`FirewallConfiguration.RESOURCE_TYPE_DFWFIREWALLCONFIGURATION`
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  disable_auto_drafts: :class:`bool` or ``None``
        :param disable_auto_drafts: To disable auto drafts, set it to true. By default, auto drafts are
            enabled.
        :type  enable_firewall: :class:`bool` or ``None``
        :param enable_firewall: If set to true, Firewall is enabled.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.disable_auto_drafts = disable_auto_drafts
        self.enable_firewall = enable_firewall
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

FirewallConfiguration._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.firewall_configuration', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'disable_auto_drafts': type.OptionalType(type.BooleanType()),
        'enable_firewall': type.OptionalType(type.BooleanType()),
    },
    FirewallConfiguration,
    False,
    None))



class FirewallIdentityStore(VapiStruct):
    """
    Represents a generic firewall identity store (e.g. Microsoft AD) The
    firewall identity store allow access to the directory group via LDAP
    protocol.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'base_distinguished_name': 'base_distinguished_name',
                            'ldap_servers': 'ldap_servers',
                            'name': 'name',
                            'netbios_name': 'netbios_name',
                            'selective_sync_settings': 'selective_sync_settings',
                            'sync_settings': 'sync_settings',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 base_distinguished_name=None,
                 ldap_servers=None,
                 name=None,
                 netbios_name=None,
                 selective_sync_settings=None,
                 sync_settings=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  base_distinguished_name: :class:`str` or ``None``
        :param base_distinguished_name: Each active directory domain has a domain naming context (NC),
            which contains domain-specific data. The root of this naming
            context is represented by a domain's distinguished name (DN) and is
            typically referred to as the NC head.
        :type  ldap_servers: :class:`list` of :class:`FirewallIdentityStoreLdapServer` or ``None``
        :param ldap_servers: Directory domain LDAP servers' information including host, name,
            port, protocol and so on.
        :type  name: :class:`str` or ``None``
        :param name: Directory domain name which best describes the domain. It could be
            unique fqdn name or it could also be descriptive. There is no
            unique contraint for domain name among different domains.
        :type  netbios_name: :class:`str` or ``None``
        :param netbios_name: NetBIOS names can contain all alphanumeric characters except for
            the certain disallowed characters. Names can contain a period, but
            names cannot start with a period. NetBIOS is similar to DNS in that
            it can serve as a directory service, but more limited as it has no
            provisions for a name hierarchy and names are limited to 15
            characters. The netbios name is case insensitive and is stored in
            upper case regardless of input case.
        :type  selective_sync_settings: :class:`FirewallIdentityStoreSelectiveSyncSettings` or ``None``
        :param selective_sync_settings: SelectiveSync settings toggle the SelectiveSync feature and
            selected OrgUnits. If this is not specified, SelectiveSync is
            disabled by default.
        :type  sync_settings: :class:`FirewallIdentityStoreSyncSettings` or ``None``
        :param sync_settings: Each domain sync settings can be changed using this object. It is
            not required since there are default values used if there is no
            specification for this object.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.base_distinguished_name = base_distinguished_name
        self.ldap_servers = ldap_servers
        self.name = name
        self.netbios_name = netbios_name
        self.selective_sync_settings = selective_sync_settings
        self.sync_settings = sync_settings
        VapiStruct.__init__(self)


FirewallIdentityStore._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.firewall_identity_store', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'base_distinguished_name': type.OptionalType(type.StringType()),
        'ldap_servers': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'FirewallIdentityStoreLdapServer'))),
        'name': type.OptionalType(type.StringType()),
        'netbios_name': type.OptionalType(type.StringType()),
        'selective_sync_settings': type.OptionalType(type.ReferenceType(__name__, 'FirewallIdentityStoreSelectiveSyncSettings')),
        'sync_settings': type.OptionalType(type.ReferenceType(__name__, 'FirewallIdentityStoreSyncSettings')),
    },
    FirewallIdentityStore,
    False,
    None))



class FirewallIdentityStoreLdapServer(VapiStruct):
    """
    Firewall identity LDAP server

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    PROTOCOL_LDAP = "LDAP"
    """


    """
    PROTOCOL_LDAPS = "LDAPS"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'domain_name': 'domain_name',
                            'host': 'host',
                            'password': 'password',
                            'port': 'port',
                            'protocol': 'protocol',
                            'thumbprint': 'thumbprint',
                            'username': 'username',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 domain_name=None,
                 host=None,
                 password=None,
                 port=None,
                 protocol=None,
                 thumbprint=None,
                 username=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  domain_name: :class:`str` or ``None``
        :param domain_name: Directory domain name which best describes the domain. It could be
            unique fqdn name or it could also be descriptive. There is no
            unique constraint for domain name among different domains.
        :type  host: :class:`str` or ``None``
        :param host: Directory LDAP server DNS host name or ip address which is
            reachable by NSX manager to be connected and do object
            synchronization. format: ip-or-hostname
        :type  password: :class:`str` or ``None``
        :param password: Directory LDAP server connection password.
        :type  port: :class:`long` or ``None``
        :param port: Directory LDAP server connection TCP/UDP port. format: int32
        :type  protocol: :class:`str` or ``None``
        :param protocol: Possible values are: 
            
            * :attr:`FirewallIdentityStoreLdapServer.PROTOCOL_LDAP`
            * :attr:`FirewallIdentityStoreLdapServer.PROTOCOL_LDAPS`
            
            Directory LDAP server connection protocol which is either LDAP or
            LDAPS.
        :type  thumbprint: :class:`str` or ``None``
        :param thumbprint: Directory LDAP server certificate thumbprint used in secure LDAPS
            connection.
        :type  username: :class:`str` or ``None``
        :param username: Directory LDAP server connection user name.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.domain_name = domain_name
        self.host = host
        self.password = password
        self.port = port
        self.protocol = protocol
        self.thumbprint = thumbprint
        self.username = username
        VapiStruct.__init__(self)


FirewallIdentityStoreLdapServer._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.firewall_identity_store_ldap_server', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'domain_name': type.OptionalType(type.StringType()),
        'host': type.OptionalType(type.StringType()),
        'password': type.OptionalType(type.StringType()),
        'port': type.OptionalType(type.IntegerType()),
        'protocol': type.OptionalType(type.StringType()),
        'thumbprint': type.OptionalType(type.StringType()),
        'username': type.OptionalType(type.StringType()),
    },
    FirewallIdentityStoreLdapServer,
    False,
    None))



class FirewallIdentityStoreSelectiveSyncSettings(VapiStruct):
    """
    Firewall identity selective sync settings

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'enabled': 'enabled',
                            'selected_org_units': 'selected_org_units',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 enabled=None,
                 selected_org_units=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  enabled: :class:`bool` or ``None``
        :param enabled: Enable or disable SelectiveSync
        :type  selected_org_units: :class:`list` of :class:`str` or ``None``
        :param selected_org_units: If SelectiveSync is enabled, this contains 1 or more OrgUnits, NSX
            will synchronize with in LDAP server. If SelectiveSync is disabled,
            do not define this or specify an empty list.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.enabled = enabled
        self.selected_org_units = selected_org_units
        VapiStruct.__init__(self)


FirewallIdentityStoreSelectiveSyncSettings._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.firewall_identity_store_selective_sync_settings', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'enabled': type.OptionalType(type.BooleanType()),
        'selected_org_units': type.OptionalType(type.ListType(type.StringType())),
    },
    FirewallIdentityStoreSelectiveSyncSettings,
    False,
    None))



class FirewallIdentityStoreSyncSettings(VapiStruct):
    """
    Firewall identity synchronization settings

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'delta_sync_interval': 'delta_sync_interval',
                            'full_sync_cron_expr': 'full_sync_cron_expr',
                            'sync_delay_in_sec': 'sync_delay_in_sec',
                            }

    def __init__(self,
                 delta_sync_interval=None,
                 full_sync_cron_expr=None,
                 sync_delay_in_sec=None,
                ):
        """
        :type  delta_sync_interval: :class:`long` or ``None``
        :param delta_sync_interval: Directory domain delta synchronization interval time between two
            delta sync in minutes. format: int64
        :type  full_sync_cron_expr: :class:`str` or ``None``
        :param full_sync_cron_expr: Directory domain full synchronization schedule using cron
            expression. For example, cron expression \"0 0 12 ? \* SUN \*\"
            means full sync is scheduled every Sunday midnight. If this object
            is null, it means there is no background cron job running for full
            sync.
        :type  sync_delay_in_sec: :class:`long` or ``None``
        :param sync_delay_in_sec: Sync delay after Directory domain has been successfully created. if
            delay is -1, initial full sync will not be triggered. format: int32
        """
        self.delta_sync_interval = delta_sync_interval
        self.full_sync_cron_expr = full_sync_cron_expr
        self.sync_delay_in_sec = sync_delay_in_sec
        VapiStruct.__init__(self)


FirewallIdentityStoreSyncSettings._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.firewall_identity_store_sync_settings', {
        'delta_sync_interval': type.OptionalType(type.IntegerType()),
        'full_sync_cron_expr': type.OptionalType(type.StringType()),
        'sync_delay_in_sec': type.OptionalType(type.IntegerType()),
    },
    FirewallIdentityStoreSyncSettings,
    False,
    None))



class FloodProtectionProfile(VapiStruct):
    """
    A profile holding TCP, UDP and ICMP and other protcol connection limits.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "FloodProtectionProfile"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    RESOURCE_TYPE_GATEWAYFLOODPROTECTIONPROFILE = "GatewayFloodProtectionProfile"
    """


    """
    RESOURCE_TYPE_DISTRIBUTEDFLOODPROTECTIONPROFILE = "DistributedFloodProtectionProfile"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'icmp_active_flow_limit': 'icmp_active_flow_limit',
                            'other_active_conn_limit': 'other_active_conn_limit',
                            'tcp_half_open_conn_limit': 'tcp_half_open_conn_limit',
                            'udp_active_flow_limit': 'udp_active_flow_limit',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='FloodProtectionProfile',
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 icmp_active_flow_limit=None,
                 other_active_conn_limit=None,
                 tcp_half_open_conn_limit=None,
                 udp_active_flow_limit=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`FloodProtectionProfile.RESOURCE_TYPE_GATEWAYFLOODPROTECTIONPROFILE`
            *
              :attr:`FloodProtectionProfile.RESOURCE_TYPE_DISTRIBUTEDFLOODPROTECTIONPROFILE`
            
            GatewayFloodProtectionProfile is used for all Tier0 and Tier1
            gateways. DistributedFloodProtectionProfile is used for all
            Transport Nodes.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  icmp_active_flow_limit: :class:`long` or ``None``
        :param icmp_active_flow_limit: If this field is empty, firewall will not set a limit to active
            ICMP connections. format: int64
        :type  other_active_conn_limit: :class:`long` or ``None``
        :param other_active_conn_limit: If this field is empty, firewall will not set a limit to other
            active connections. besides UDP, ICMP and half open TCP
            connections. format: int64
        :type  tcp_half_open_conn_limit: :class:`long` or ``None``
        :param tcp_half_open_conn_limit: If this field is empty, firewall will not set a limit to half open
            TCP connections. format: int64
        :type  udp_active_flow_limit: :class:`long` or ``None``
        :param udp_active_flow_limit: If this field is empty, firewall will not set a limit to active UDP
            connections. format: int64
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.icmp_active_flow_limit = icmp_active_flow_limit
        self.other_active_conn_limit = other_active_conn_limit
        self.tcp_half_open_conn_limit = tcp_half_open_conn_limit
        self.udp_active_flow_limit = udp_active_flow_limit
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

FloodProtectionProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.flood_protection_profile', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'icmp_active_flow_limit': type.OptionalType(type.IntegerType()),
        'other_active_conn_limit': type.OptionalType(type.IntegerType()),
        'tcp_half_open_conn_limit': type.OptionalType(type.IntegerType()),
        'udp_active_flow_limit': type.OptionalType(type.IntegerType()),
    },
    FloodProtectionProfile,
    False,
    None))



class FloodProtectionProfileBindingListResult(VapiStruct):
    """
    Paged Collection of flood protection profile binding maps

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`FloodProtectionProfileBindingMap` or ``None``
        :param results: Flood protection profile binding maps list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


FloodProtectionProfileBindingListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.flood_protection_profile_binding_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'FloodProtectionProfileBindingMap'))),
    },
    FloodProtectionProfileBindingListResult,
    False,
    None))



class FloodProtectionProfileBindingMap(VapiStruct):
    """
    This entity will be used to establish association between Flood Protection
    profile and Logical Routers.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'profile_path': 'profile_path',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 profile_path=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  profile_path: :class:`str` or ``None``
        :param profile_path: PolicyPath of associated Profile
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.profile_path = profile_path
        VapiStruct.__init__(self)


FloodProtectionProfileBindingMap._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.flood_protection_profile_binding_map', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'profile_path': type.OptionalType(type.StringType()),
    },
    FloodProtectionProfileBindingMap,
    False,
    None))



class FloodProtectionProfileListResult(VapiStruct):
    """
    Paged Collection of flood protection profiles

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param results: Flood protection profile list results
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`FloodProtectionProfile`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`FloodProtectionProfile`.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


FloodProtectionProfileListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.flood_protection_profile_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'FloodProtectionProfile')]))),
    },
    FloodProtectionProfileListResult,
    False,
    None))



class Footer(VapiStruct):
    """
    Footer of a widget that provides additional information or allows an action
    such as clickable url for navigation. An example usage of footer is
    provided under 'example_request' section of 'CreateWidgetConfiguration'
    API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'actions': 'actions',
                            'condition': 'condition',
                            }

    def __init__(self,
                 actions=None,
                 condition=None,
                ):
        """
        :type  actions: :class:`list` of :class:`FooterAction` or ``None``
        :param actions: Action to be performed at the footer of a widget. An action at the
            footer can be simple text description or a hyperlink to a UI page.
            Action allows a clickable url for navigation. An example usage of
            footer action is provided under 'example_request' section of
            'CreateWidgetConfiguration' API.
        :type  condition: :class:`str` or ``None``
        :param condition: If the condition is met then the footer will be applied. Examples
            of expression syntax are provided under 'example_request' section
            of 'CreateWidgetConfiguration' API.
        """
        self.actions = actions
        self.condition = condition
        VapiStruct.__init__(self)


Footer._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.footer', {
        'actions': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'FooterAction'))),
        'condition': type.OptionalType(type.StringType()),
    },
    Footer,
    False,
    None))



class FooterAction(VapiStruct):
    """
    Action specified at the footer of a widget to provide additional
    information or to provide a clickable url for navigation. An example usage
    of footer action is provided under the 'example_request' section of
    'CreateWidgetConfiguration' API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'dock_to_container_footer': 'dock_to_container_footer',
                            'label': 'label',
                            'url': 'url',
                            }

    def __init__(self,
                 dock_to_container_footer=None,
                 label=None,
                 url=None,
                ):
        """
        :type  dock_to_container_footer: :class:`bool` or ``None``
        :param dock_to_container_footer: If true, the footer will appear in the underlying container that
            holds the widget.
        :type  label: :class:`Label` or ``None``
        :param label: Label to be displayed against the footer action.
        :type  url: :class:`str` or ``None``
        :param url: Hyperlink to the UI page that provides details of action.
        """
        self.dock_to_container_footer = dock_to_container_footer
        self.label = label
        self.url = url
        VapiStruct.__init__(self)


FooterAction._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.footer_action', {
        'dock_to_container_footer': type.OptionalType(type.BooleanType()),
        'label': type.OptionalType(type.ReferenceType(__name__, 'Label')),
        'url': type.OptionalType(type.StringType()),
    },
    FooterAction,
    False,
    None))



class ForwardingPolicy(VapiStruct):
    """
    Contains ordered list of forwarding rules that determine when to forward
    traffic to / from the underlay for accessing cloud native services.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'category': 'category',
                            'comments': 'comments',
                            'internal_sequence_number': 'internal_sequence_number',
                            'is_default': 'is_default',
                            'lock_modified_by': 'lock_modified_by',
                            'lock_modified_time': 'lock_modified_time',
                            'locked': 'locked',
                            'rule_count': 'rule_count',
                            'scheduler_path': 'scheduler_path',
                            'scope': 'scope',
                            'sequence_number': 'sequence_number',
                            'stateful': 'stateful',
                            'tcp_strict': 'tcp_strict',
                            'rules': 'rules',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 category=None,
                 comments=None,
                 internal_sequence_number=None,
                 is_default=None,
                 lock_modified_by=None,
                 lock_modified_time=None,
                 locked=None,
                 rule_count=None,
                 scheduler_path=None,
                 scope=None,
                 sequence_number=None,
                 stateful=None,
                 tcp_strict=None,
                 rules=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  category: :class:`str` or ``None``
        :param category: - Distributed Firewall - Policy framework provides five pre-defined
            categories for classifying a security policy. They are
            \"Ethernet\",\"Emergency\", \"Infrastructure\" \"Environment\" and
            \"Application\". There is a pre-determined order in which the
            policy framework manages the priority of these security policies.
            Ethernet category is for supporting layer 2 firewall rules. The
            other four categories are applicable for layer 3 rules. Amongst
            them, the Emergency category has the highest priority followed by
            Infrastructure, Environment and then Application rules.
            Administrator can choose to categorize a security policy into the
            above categories or can choose to leave it empty. If empty it will
            have the least precedence w.r.t the above four categories. - Edge
            Firewall - Policy Framework for Edge Firewall provides six
            pre-defined categories \"Emergency\", \"SystemRules\",
            \"SharedPreRules\", \"LocalGatewayRules\", \"AutoServiceRules\" and
            \"Default\", in order of priority of rules. All categories are
            allowed for Gatetway Policies that belong to 'default' Domain.
            However, for user created domains, category is restricted to
            \"SharedPreRules\" or \"LocalGatewayRules\" only. Also, the users
            can add/modify/delete rules from only the \"SharedPreRules\" and
            \"LocalGatewayRules\" categories. If user doesn't specify the
            category then defaulted to \"Rules\". System generated category is
            used by NSX created rules, for example BFD rules. Autoplumbed
            category used by NSX verticals to autoplumb data path rules.
            Finally, \"Default\" category is the placeholder default rules with
            lowest in the order of priority.
        :type  comments: :class:`str` or ``None``
        :param comments: Comments for security policy lock/unlock.
        :type  internal_sequence_number: :class:`long` or ``None``
        :param internal_sequence_number: This field is to indicate the internal sequence number of a policy
            with respect to the policies across categories. format: int32
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  is_default: :class:`bool` or ``None``
        :param is_default: A flag to indicate whether policy is a default policy.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  lock_modified_by: :class:`str` or ``None``
        :param lock_modified_by: ID of the user who last modified the lock for the secruity policy.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  lock_modified_time: :class:`long` or ``None``
        :param lock_modified_time: SecurityPolicy locked/unlocked time in epoch milliseconds. format:
            int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  locked: :class:`bool` or ``None``
        :param locked: Indicates whether a security policy should be locked. If the
            security policy is locked by a user, then no other user would be
            able to modify this security policy. Once the user releases the
            lock, other users can update this security policy.
        :type  rule_count: :class:`long` or ``None``
        :param rule_count: The count of rules in the policy. format: int32
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  scheduler_path: :class:`str` or ``None``
        :param scheduler_path: Provides a mechanism to apply the rules in this policy for a
            specified time duration.
        :type  scope: :class:`list` of :class:`str` or ``None``
        :param scope: The list of group paths where the rules in this policy will get
            applied. This scope will take precedence over rule level scope.
            Supported only for security and redirection policies. In case of
            RedirectionPolicy, it is expected only when the policy is NS and
            redirecting to service chain.
        :type  sequence_number: :class:`long` or ``None``
        :param sequence_number: This field is used to resolve conflicts between security policies
            across domains. In order to change the sequence number of a policy
            one can fire a POST request on the policy entity with a query
            parameter action=revise The sequence number field will reflect the
            value of the computed sequence number upon execution of the above
            mentioned POST request. For scenarios where the administrator is
            using a template to update several security policies, the only way
            to set the sequence number is to explicitly specify the sequence
            number for each security policy. If no sequence number is specified
            in the payload, a value of 0 is assigned by default. If there are
            multiple policies with the same sequence number then their order is
            not deterministic. If a specific order of policies is desired, then
            one has to specify unique sequence numbers or use the POST request
            on the policy entity with a query parameter action=revise to let
            the framework assign a sequence number format: int32
        :type  stateful: :class:`bool` or ``None``
        :param stateful: Stateful or Stateless nature of security policy is enforced on all
            rules in this security policy. When it is stateful, the state of
            the network connects are tracked and a stateful packet inspection
            is performed. Layer3 security policies can be stateful or
            stateless. By default, they are stateful. Layer2 security policies
            can only be stateless.
        :type  tcp_strict: :class:`bool` or ``None``
        :param tcp_strict: Ensures that a 3 way TCP handshake is done before the data packets
            are sent. tcp_strict=true is supported only for stateful security
            policies. If the tcp_strict flag is not specified and the security
            policy is stateful, then tcp_strict will be set to true.
        :type  rules: :class:`list` of :class:`ForwardingRule` or ``None``
        :param rules: Rules that are a part of this ForwardingPolicy
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.category = category
        self.comments = comments
        self.internal_sequence_number = internal_sequence_number
        self.is_default = is_default
        self.lock_modified_by = lock_modified_by
        self.lock_modified_time = lock_modified_time
        self.locked = locked
        self.rule_count = rule_count
        self.scheduler_path = scheduler_path
        self.scope = scope
        self.sequence_number = sequence_number
        self.stateful = stateful
        self.tcp_strict = tcp_strict
        self.rules = rules
        VapiStruct.__init__(self)


ForwardingPolicy._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.forwarding_policy', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'category': type.OptionalType(type.StringType()),
        'comments': type.OptionalType(type.StringType()),
        'internal_sequence_number': type.OptionalType(type.IntegerType()),
        'is_default': type.OptionalType(type.BooleanType()),
        'lock_modified_by': type.OptionalType(type.StringType()),
        'lock_modified_time': type.OptionalType(type.IntegerType()),
        'locked': type.OptionalType(type.BooleanType()),
        'rule_count': type.OptionalType(type.IntegerType()),
        'scheduler_path': type.OptionalType(type.StringType()),
        'scope': type.OptionalType(type.ListType(type.StringType())),
        'sequence_number': type.OptionalType(type.IntegerType()),
        'stateful': type.OptionalType(type.BooleanType()),
        'tcp_strict': type.OptionalType(type.BooleanType()),
        'rules': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ForwardingRule'))),
    },
    ForwardingPolicy,
    False,
    None))



class ForwardingPolicyListResult(VapiStruct):
    """
    Paged Collection of ForwardingPolicy objects

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`ForwardingPolicy` or ``None``
        :param results: ForwardingPolicy list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


ForwardingPolicyListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.forwarding_policy_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ForwardingPolicy'))),
    },
    ForwardingPolicyListResult,
    False,
    None))



class ForwardingRule(VapiStruct):
    """
    Forwarding rule that determine how to forward traffic from a VM. Traffic
    from VM can either be routed via Overlay or Underlay when VM is on hybrid
    port. Additionally NAT can be performed for VM or container on overlay to
    route traffic to/from underlay ROUTE_TO_UNDERLAY - Access a service on
    underlay space from a VM connected to hybrid port. Eg access to AWS S3 on
    AWS underlay ROUTE_TO_OVERLAY - Access a service on overlay space from a VM
    connected to hybrid port. ROUTE_FROM_UNDERLAY - Access a service hosted on
    a VM (that is connected to hybrid port) from underlay space. Eg access from
    AWS ELB to VM ROUTE_FROM_OVERLAY - Access a service hosted on a VM (that is
    connected to hybrid port) from overlay space NAT_FROM_UNDERLAY - Access a
    service on overlay VM/container from underlay space using DNAT from
    underlay IP to overlay IP NAT_TO_UNDERLAY - Access an underlay service from
    a VM/container on overlay space using SNAT from overlay IP to underlay IP

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    DIRECTION_IN = "IN"
    """


    """
    DIRECTION_OUT = "OUT"
    """


    """
    DIRECTION_IN_OUT = "IN_OUT"
    """


    """
    IP_PROTOCOL_IPV4 = "IPV4"
    """


    """
    IP_PROTOCOL_IPV6 = "IPV6"
    """


    """
    IP_PROTOCOL_IPV4_IPV6 = "IPV4_IPV6"
    """


    """
    ACTION_ROUTE_TO_UNDERLAY = "ROUTE_TO_UNDERLAY"
    """


    """
    ACTION_ROUTE_TO_OVERLAY = "ROUTE_TO_OVERLAY"
    """


    """
    ACTION_ROUTE_FROM_UNDERLAY = "ROUTE_FROM_UNDERLAY"
    """


    """
    ACTION_ROUTE_FROM_OVERLAY = "ROUTE_FROM_OVERLAY"
    """


    """
    ACTION_NAT_FROM_UNDERLAY = "NAT_FROM_UNDERLAY"
    """


    """
    ACTION_NAT_TO_UNDERLAY = "NAT_TO_UNDERLAY"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'destination_groups': 'destination_groups',
                            'destinations_excluded': 'destinations_excluded',
                            'direction': 'direction',
                            'disabled': 'disabled',
                            'ip_protocol': 'ip_protocol',
                            'is_default': 'is_default',
                            'logged': 'logged',
                            'notes': 'notes',
                            'profiles': 'profiles',
                            'rule_id': 'rule_id',
                            'scope': 'scope',
                            'sequence_number': 'sequence_number',
                            'service_entries': 'service_entries',
                            'services': 'services',
                            'source_groups': 'source_groups',
                            'sources_excluded': 'sources_excluded',
                            'tag': 'tag',
                            'action': 'action',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 destination_groups=None,
                 destinations_excluded=None,
                 direction=None,
                 disabled=None,
                 ip_protocol=None,
                 is_default=None,
                 logged=None,
                 notes=None,
                 profiles=None,
                 rule_id=None,
                 scope=None,
                 sequence_number=None,
                 service_entries=None,
                 services=None,
                 source_groups=None,
                 sources_excluded=None,
                 tag=None,
                 action=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  destination_groups: :class:`list` of :class:`str` or ``None``
        :param destination_groups: We need paths as duplicate names may exist for groups under
            different domains. Along with paths we support IP Address of type
            IPv4 and IPv6. IP Address can be in one of the format(CIDR, IP
            Address, Range of IP Address). In order to specify all groups, use
            the constant \"ANY\". This is case insensitive. If \"ANY\" is used,
            it should be the ONLY element in the group array. Error will be
            thrown if ANY is used in conjunction with other values.
        :type  destinations_excluded: :class:`bool` or ``None``
        :param destinations_excluded: If set to true, the rule gets applied on all the groups that are
            NOT part of the destination groups. If false, the rule applies to
            the destination groups
        :type  direction: :class:`str` or ``None``
        :param direction: Possible values are: 
            
            * :attr:`ForwardingRule.DIRECTION_IN`
            * :attr:`ForwardingRule.DIRECTION_OUT`
            * :attr:`ForwardingRule.DIRECTION_IN_OUT`
            
             Define direction of traffic.
        :type  disabled: :class:`bool` or ``None``
        :param disabled: Flag to disable the rule. Default is enabled.
        :type  ip_protocol: :class:`str` or ``None``
        :param ip_protocol: Possible values are: 
            
            * :attr:`ForwardingRule.IP_PROTOCOL_IPV4`
            * :attr:`ForwardingRule.IP_PROTOCOL_IPV6`
            * :attr:`ForwardingRule.IP_PROTOCOL_IPV4_IPV6`
            
            Type of IP packet that should be matched while enforcing the rule.
            The value is set to IPV4_IPV6 for Layer3 rule if not specified. For
            Layer2/Ether rule the value must be null.
        :type  is_default: :class:`bool` or ``None``
        :param is_default: A flag to indicate whether rule is a default rule.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  logged: :class:`bool` or ``None``
        :param logged: Flag to enable packet logging. Default is disabled.
        :type  notes: :class:`str` or ``None``
        :param notes: Text for additional notes on changes.
        :type  profiles: :class:`list` of :class:`str` or ``None``
        :param profiles: Holds the list of layer 7 service profile paths. These profiles
            accept attributes and sub-attributes of various network services
            (e.g. L4 AppId, encryption algorithm, domain name, etc) as key
            value pairs.
        :type  rule_id: :class:`long` or ``None``
        :param rule_id: This is a unique 4 byte positive number that is assigned by the
            system. This rule id is passed all the way down to the data path.
            The first 1GB (1000 to 2^30) will be shared by GM and LM with zebra
            style striped number space. For E.g 1000 to (1Million -1) by LM,
            (1M - 2M-1) by GM and so on. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  scope: :class:`list` of :class:`str` or ``None``
        :param scope: The list of policy paths where the rule is applied
            LR/Edge/T0/T1/LRP etc. Note that a given rule can be applied on
            multiple LRs/LRPs.
        :type  sequence_number: :class:`long` or ``None``
        :param sequence_number: This field is used to resolve conflicts between multiple Rules
            under Security or Gateway Policy for a Domain If no sequence number
            is specified in the payload, a value of 0 is assigned by default.
            If there are multiple rules with the same sequence number then
            their order is not deterministic. If a specific order of rules is
            desired, then one has to specify unique sequence numbers or use the
            POST request on the rule entity with a query parameter
            action=revise to let the framework assign a sequence number format:
            int32
        :type  service_entries: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param service_entries: In order to specify raw services this can be used, along with
            services which contains path to services. This can be empty or
            null.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ServiceEntry`. When methods return a value of this class as
            a return value, the attribute will contain all the attributes
            defined in :class:`ServiceEntry`.
        :type  services: :class:`list` of :class:`str` or ``None``
        :param services: In order to specify all services, use the constant \"ANY\". This is
            case insensitive. If \"ANY\" is used, it should be the ONLY element
            in the services array. Error will be thrown if ANY is used in
            conjunction with other values.
        :type  source_groups: :class:`list` of :class:`str` or ``None``
        :param source_groups: We need paths as duplicate names may exist for groups under
            different domains. Along with paths we support IP Address of type
            IPv4 and IPv6. IP Address can be in one of the format(CIDR, IP
            Address, Range of IP Address). In order to specify all groups, use
            the constant \"ANY\". This is case insensitive. If \"ANY\" is used,
            it should be the ONLY element in the group array. Error will be
            thrown if ANY is used in conjunction with other values.
        :type  sources_excluded: :class:`bool` or ``None``
        :param sources_excluded: If set to true, the rule gets applied on all the groups that are
            NOT part of the source groups. If false, the rule applies to the
            source groups
        :type  tag: :class:`str` or ``None``
        :param tag: User level field which will be printed in CLI and packet logs.
        :type  action: :class:`str` or ``None``
        :param action: Possible values are: 
            
            * :attr:`ForwardingRule.ACTION_ROUTE_TO_UNDERLAY`
            * :attr:`ForwardingRule.ACTION_ROUTE_TO_OVERLAY`
            * :attr:`ForwardingRule.ACTION_ROUTE_FROM_UNDERLAY`
            * :attr:`ForwardingRule.ACTION_ROUTE_FROM_OVERLAY`
            * :attr:`ForwardingRule.ACTION_NAT_FROM_UNDERLAY`
            * :attr:`ForwardingRule.ACTION_NAT_TO_UNDERLAY`
            
             The action to be applied to all the services
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.destination_groups = destination_groups
        self.destinations_excluded = destinations_excluded
        self.direction = direction
        self.disabled = disabled
        self.ip_protocol = ip_protocol
        self.is_default = is_default
        self.logged = logged
        self.notes = notes
        self.profiles = profiles
        self.rule_id = rule_id
        self.scope = scope
        self.sequence_number = sequence_number
        self.service_entries = service_entries
        self.services = services
        self.source_groups = source_groups
        self.sources_excluded = sources_excluded
        self.tag = tag
        self.action = action
        VapiStruct.__init__(self)


ForwardingRule._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.forwarding_rule', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'destination_groups': type.OptionalType(type.ListType(type.StringType())),
        'destinations_excluded': type.OptionalType(type.BooleanType()),
        'direction': type.OptionalType(type.StringType()),
        'disabled': type.OptionalType(type.BooleanType()),
        'ip_protocol': type.OptionalType(type.StringType()),
        'is_default': type.OptionalType(type.BooleanType()),
        'logged': type.OptionalType(type.BooleanType()),
        'notes': type.OptionalType(type.StringType()),
        'profiles': type.OptionalType(type.ListType(type.StringType())),
        'rule_id': type.OptionalType(type.IntegerType()),
        'scope': type.OptionalType(type.ListType(type.StringType())),
        'sequence_number': type.OptionalType(type.IntegerType()),
        'service_entries': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ServiceEntry')]))),
        'services': type.OptionalType(type.ListType(type.StringType())),
        'source_groups': type.OptionalType(type.ListType(type.StringType())),
        'sources_excluded': type.OptionalType(type.BooleanType()),
        'tag': type.OptionalType(type.StringType()),
        'action': type.OptionalType(type.StringType()),
    },
    ForwardingRule,
    False,
    None))



class ForwardingRuleListResult(VapiStruct):
    """
    Paged Collection of ForwardingRules

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`ForwardingRule` or ``None``
        :param results: Rule list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


ForwardingRuleListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.forwarding_rule_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ForwardingRule'))),
    },
    ForwardingRuleListResult,
    False,
    None))



class FullSyncState(VapiStruct):
    """
    Provides FullSync state for Local Manager from Global Manager.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    LAST_COMPLETED_STAGE_INITIAL = "INITIAL"
    """


    """
    LAST_COMPLETED_STAGE_PAUSE_DCNS = "PAUSE_DCNS"
    """


    """
    LAST_COMPLETED_STAGE_DELETED_STALE_ENTITIES = "DELETED_STALE_ENTITIES"
    """


    """
    LAST_COMPLETED_STAGE_PROCESSED_FULLSYNC_DATA = "PROCESSED_FULLSYNC_DATA"
    """


    """
    LAST_COMPLETED_STAGE_PROCESSED_DELTAS = "PROCESSED_DELTAS"
    """


    """
    LAST_COMPLETED_STAGE_UNPAUSE_DCNS = "UNPAUSE_DCNS"
    """


    """
    LAST_COMPLETED_STAGE_COMPLETED = "COMPLETED"
    """


    """
    LAST_COMPLETED_STAGE_ERROR = "ERROR"
    """


    """
    LAST_COMPLETED_STAGE_ABORTED = "ABORTED"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'errors': 'errors',
                            'full_sync_id': 'full_sync_id',
                            'last_completed_stage': 'last_completed_stage',
                            'last_upate_time': 'last_upate_time',
                            'start_time': 'start_time',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 errors=None,
                 full_sync_id=None,
                 last_completed_stage=None,
                 last_upate_time=None,
                 start_time=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  errors: :class:`list` of :class:`str` or ``None``
        :param errors: Errors occurred during full sync.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  full_sync_id: :class:`str` or ``None``
        :param full_sync_id: Full sync id generated by Async Replicator (AR) service.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_completed_stage: :class:`str` or ``None``
        :param last_completed_stage: Possible values are: 
            
            * :attr:`FullSyncState.LAST_COMPLETED_STAGE_INITIAL`
            * :attr:`FullSyncState.LAST_COMPLETED_STAGE_PAUSE_DCNS`
            * :attr:`FullSyncState.LAST_COMPLETED_STAGE_DELETED_STALE_ENTITIES`
            *
              :attr:`FullSyncState.LAST_COMPLETED_STAGE_PROCESSED_FULLSYNC_DATA`
            * :attr:`FullSyncState.LAST_COMPLETED_STAGE_PROCESSED_DELTAS`
            * :attr:`FullSyncState.LAST_COMPLETED_STAGE_UNPAUSE_DCNS`
            * :attr:`FullSyncState.LAST_COMPLETED_STAGE_COMPLETED`
            * :attr:`FullSyncState.LAST_COMPLETED_STAGE_ERROR`
            * :attr:`FullSyncState.LAST_COMPLETED_STAGE_ABORTED`
            
            The current stage of full sync completion for ongoing sync. When
            Local Manager (LM) receives full sync data from AR, LM starts with
            workflow to prserve the state and restore the full sync from where
            it has left off in case of change of leadership of the service to
            different NSX node or LM is restarted. LM starts the full sync
            workflow with state INITIAL capturing the AR full sync id and data
            location details. The stage/state transition follows the order
            given below INITIAL - Full sync started PROCESSED_FULLSYNC_DATA -
            Compelted processing the full state data provided by AR
            PRCESSED_DELTAS - Completed processing pending delta changes
            provided by AR. DELETED_STALE_ENTITIES - Completed deletion of all
            global entities on LM that are not in GM anymore COMPLETED - Full
            sync handling is completed on LM ERROR - Full sync failed with
            errors on LM, in which case AR will re-attempt full sync later
            point in time for the LM ABORTED - Indicates that the full sync
            cancelled as per user request
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_upate_time: :class:`long` or ``None``
        :param last_upate_time: Timestamp of last update, could be progress or success or error.
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  start_time: :class:`long` or ``None``
        :param start_time: Timestamp of Full Sync start. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.errors = errors
        self.full_sync_id = full_sync_id
        self.last_completed_stage = last_completed_stage
        self.last_upate_time = last_upate_time
        self.start_time = start_time
        VapiStruct.__init__(self)


FullSyncState._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.full_sync_state', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'errors': type.OptionalType(type.ListType(type.StringType())),
        'full_sync_id': type.OptionalType(type.StringType()),
        'last_completed_stage': type.OptionalType(type.StringType()),
        'last_upate_time': type.OptionalType(type.IntegerType()),
        'start_time': type.OptionalType(type.IntegerType()),
    },
    FullSyncState,
    False,
    None))



class FullSyncStateListResult(VapiStruct):
    """
    Paged Collection of FullSync states.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`FullSyncState` or ``None``
        :param results: FullSync states list.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


FullSyncStateListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.full_sync_state_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'FullSyncState'))),
    },
    FullSyncStateListResult,
    False,
    None))



class GatewayFloodProtectionProfile(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "GatewayFloodProtectionProfile"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'icmp_active_flow_limit': 'icmp_active_flow_limit',
                            'other_active_conn_limit': 'other_active_conn_limit',
                            'tcp_half_open_conn_limit': 'tcp_half_open_conn_limit',
                            'udp_active_flow_limit': 'udp_active_flow_limit',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='GatewayFloodProtectionProfile',
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 icmp_active_flow_limit=None,
                 other_active_conn_limit=None,
                 tcp_half_open_conn_limit=None,
                 udp_active_flow_limit=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`FloodProtectionProfile.RESOURCE_TYPE_GATEWAYFLOODPROTECTIONPROFILE`
            *
              :attr:`FloodProtectionProfile.RESOURCE_TYPE_DISTRIBUTEDFLOODPROTECTIONPROFILE`
            
            GatewayFloodProtectionProfile is used for all Tier0 and Tier1
            gateways. DistributedFloodProtectionProfile is used for all
            Transport Nodes.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  icmp_active_flow_limit: :class:`long` or ``None``
        :param icmp_active_flow_limit: If this field is empty, firewall will not set a limit to active
            ICMP connections. format: int64
        :type  other_active_conn_limit: :class:`long` or ``None``
        :param other_active_conn_limit: If this field is empty, firewall will not set a limit to other
            active connections. besides UDP, ICMP and half open TCP
            connections. format: int64
        :type  tcp_half_open_conn_limit: :class:`long` or ``None``
        :param tcp_half_open_conn_limit: If this field is empty, firewall will not set a limit to half open
            TCP connections. format: int64
        :type  udp_active_flow_limit: :class:`long` or ``None``
        :param udp_active_flow_limit: If this field is empty, firewall will not set a limit to active UDP
            connections. format: int64
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.icmp_active_flow_limit = icmp_active_flow_limit
        self.other_active_conn_limit = other_active_conn_limit
        self.tcp_half_open_conn_limit = tcp_half_open_conn_limit
        self.udp_active_flow_limit = udp_active_flow_limit
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

GatewayFloodProtectionProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.gateway_flood_protection_profile', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'icmp_active_flow_limit': type.OptionalType(type.IntegerType()),
        'other_active_conn_limit': type.OptionalType(type.IntegerType()),
        'tcp_half_open_conn_limit': type.OptionalType(type.IntegerType()),
        'udp_active_flow_limit': type.OptionalType(type.IntegerType()),
    },
    GatewayFloodProtectionProfile,
    False,
    None))



class GatewayPolicy(VapiStruct):
    """
    Contains ordered list of Rules for GatewayPolicy

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'category': 'category',
                            'comments': 'comments',
                            'internal_sequence_number': 'internal_sequence_number',
                            'is_default': 'is_default',
                            'lock_modified_by': 'lock_modified_by',
                            'lock_modified_time': 'lock_modified_time',
                            'locked': 'locked',
                            'rule_count': 'rule_count',
                            'scheduler_path': 'scheduler_path',
                            'scope': 'scope',
                            'sequence_number': 'sequence_number',
                            'stateful': 'stateful',
                            'tcp_strict': 'tcp_strict',
                            'rules': 'rules',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 category=None,
                 comments=None,
                 internal_sequence_number=None,
                 is_default=None,
                 lock_modified_by=None,
                 lock_modified_time=None,
                 locked=None,
                 rule_count=None,
                 scheduler_path=None,
                 scope=None,
                 sequence_number=None,
                 stateful=None,
                 tcp_strict=None,
                 rules=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  category: :class:`str` or ``None``
        :param category: - Distributed Firewall - Policy framework provides five pre-defined
            categories for classifying a security policy. They are
            \"Ethernet\",\"Emergency\", \"Infrastructure\" \"Environment\" and
            \"Application\". There is a pre-determined order in which the
            policy framework manages the priority of these security policies.
            Ethernet category is for supporting layer 2 firewall rules. The
            other four categories are applicable for layer 3 rules. Amongst
            them, the Emergency category has the highest priority followed by
            Infrastructure, Environment and then Application rules.
            Administrator can choose to categorize a security policy into the
            above categories or can choose to leave it empty. If empty it will
            have the least precedence w.r.t the above four categories. - Edge
            Firewall - Policy Framework for Edge Firewall provides six
            pre-defined categories \"Emergency\", \"SystemRules\",
            \"SharedPreRules\", \"LocalGatewayRules\", \"AutoServiceRules\" and
            \"Default\", in order of priority of rules. All categories are
            allowed for Gatetway Policies that belong to 'default' Domain.
            However, for user created domains, category is restricted to
            \"SharedPreRules\" or \"LocalGatewayRules\" only. Also, the users
            can add/modify/delete rules from only the \"SharedPreRules\" and
            \"LocalGatewayRules\" categories. If user doesn't specify the
            category then defaulted to \"Rules\". System generated category is
            used by NSX created rules, for example BFD rules. Autoplumbed
            category used by NSX verticals to autoplumb data path rules.
            Finally, \"Default\" category is the placeholder default rules with
            lowest in the order of priority.
        :type  comments: :class:`str` or ``None``
        :param comments: Comments for security policy lock/unlock.
        :type  internal_sequence_number: :class:`long` or ``None``
        :param internal_sequence_number: This field is to indicate the internal sequence number of a policy
            with respect to the policies across categories. format: int32
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  is_default: :class:`bool` or ``None``
        :param is_default: A flag to indicate whether policy is a default policy.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  lock_modified_by: :class:`str` or ``None``
        :param lock_modified_by: ID of the user who last modified the lock for the secruity policy.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  lock_modified_time: :class:`long` or ``None``
        :param lock_modified_time: SecurityPolicy locked/unlocked time in epoch milliseconds. format:
            int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  locked: :class:`bool` or ``None``
        :param locked: Indicates whether a security policy should be locked. If the
            security policy is locked by a user, then no other user would be
            able to modify this security policy. Once the user releases the
            lock, other users can update this security policy.
        :type  rule_count: :class:`long` or ``None``
        :param rule_count: The count of rules in the policy. format: int32
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  scheduler_path: :class:`str` or ``None``
        :param scheduler_path: Provides a mechanism to apply the rules in this policy for a
            specified time duration.
        :type  scope: :class:`list` of :class:`str` or ``None``
        :param scope: The list of group paths where the rules in this policy will get
            applied. This scope will take precedence over rule level scope.
            Supported only for security and redirection policies. In case of
            RedirectionPolicy, it is expected only when the policy is NS and
            redirecting to service chain.
        :type  sequence_number: :class:`long` or ``None``
        :param sequence_number: This field is used to resolve conflicts between security policies
            across domains. In order to change the sequence number of a policy
            one can fire a POST request on the policy entity with a query
            parameter action=revise The sequence number field will reflect the
            value of the computed sequence number upon execution of the above
            mentioned POST request. For scenarios where the administrator is
            using a template to update several security policies, the only way
            to set the sequence number is to explicitly specify the sequence
            number for each security policy. If no sequence number is specified
            in the payload, a value of 0 is assigned by default. If there are
            multiple policies with the same sequence number then their order is
            not deterministic. If a specific order of policies is desired, then
            one has to specify unique sequence numbers or use the POST request
            on the policy entity with a query parameter action=revise to let
            the framework assign a sequence number format: int32
        :type  stateful: :class:`bool` or ``None``
        :param stateful: Stateful or Stateless nature of security policy is enforced on all
            rules in this security policy. When it is stateful, the state of
            the network connects are tracked and a stateful packet inspection
            is performed. Layer3 security policies can be stateful or
            stateless. By default, they are stateful. Layer2 security policies
            can only be stateless.
        :type  tcp_strict: :class:`bool` or ``None``
        :param tcp_strict: Ensures that a 3 way TCP handshake is done before the data packets
            are sent. tcp_strict=true is supported only for stateful security
            policies. If the tcp_strict flag is not specified and the security
            policy is stateful, then tcp_strict will be set to true.
        :type  rules: :class:`list` of :class:`Rule` or ``None``
        :param rules: Rules that are a part of this SecurityPolicy
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.category = category
        self.comments = comments
        self.internal_sequence_number = internal_sequence_number
        self.is_default = is_default
        self.lock_modified_by = lock_modified_by
        self.lock_modified_time = lock_modified_time
        self.locked = locked
        self.rule_count = rule_count
        self.scheduler_path = scheduler_path
        self.scope = scope
        self.sequence_number = sequence_number
        self.stateful = stateful
        self.tcp_strict = tcp_strict
        self.rules = rules
        VapiStruct.__init__(self)


GatewayPolicy._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.gateway_policy', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'category': type.OptionalType(type.StringType()),
        'comments': type.OptionalType(type.StringType()),
        'internal_sequence_number': type.OptionalType(type.IntegerType()),
        'is_default': type.OptionalType(type.BooleanType()),
        'lock_modified_by': type.OptionalType(type.StringType()),
        'lock_modified_time': type.OptionalType(type.IntegerType()),
        'locked': type.OptionalType(type.BooleanType()),
        'rule_count': type.OptionalType(type.IntegerType()),
        'scheduler_path': type.OptionalType(type.StringType()),
        'scope': type.OptionalType(type.ListType(type.StringType())),
        'sequence_number': type.OptionalType(type.IntegerType()),
        'stateful': type.OptionalType(type.BooleanType()),
        'tcp_strict': type.OptionalType(type.BooleanType()),
        'rules': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Rule'))),
    },
    GatewayPolicy,
    False,
    None))



class GatewayPolicyListResult(VapiStruct):
    """
    Paged Collection of gateway policies

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`GatewayPolicy` or ``None``
        :param results: GatewayPolicy list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


GatewayPolicyListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.gateway_policy_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'GatewayPolicy'))),
    },
    GatewayPolicyListResult,
    False,
    None))



class GatewayQosProfile(VapiStruct):
    """
    QoS profile contains configuration of rate limiting properties which can be
    applied in ingress and egress directions at Tier1 gateways

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    EXCESS_ACTION_DROP = "DROP"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'burst_size': 'burst_size',
                            'committed_bandwitdth': 'committed_bandwitdth',
                            'excess_action': 'excess_action',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 burst_size=None,
                 committed_bandwitdth=None,
                 excess_action=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  burst_size: :class:`long` or ``None``
        :param burst_size: Burst size in bytes. format: int32
        :type  committed_bandwitdth: :class:`long` or ``None``
        :param committed_bandwitdth: Committed bandwidth in both directions specoficd in Mbps. Bandwidth
            is limited to line rate when the value configured is greater than
            line rate. format: int32
        :type  excess_action: :class:`str` or ``None``
        :param excess_action: Possible values are: 
            
            * :attr:`GatewayQosProfile.EXCESS_ACTION_DROP`
            
             Action on traffic exceeding bandwidth.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.burst_size = burst_size
        self.committed_bandwitdth = committed_bandwitdth
        self.excess_action = excess_action
        VapiStruct.__init__(self)


GatewayQosProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.gateway_qos_profile', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'burst_size': type.OptionalType(type.IntegerType()),
        'committed_bandwitdth': type.OptionalType(type.IntegerType()),
        'excess_action': type.OptionalType(type.StringType()),
    },
    GatewayQosProfile,
    False,
    None))



class GatewayQosProfileConfig(VapiStruct):
    """
    Gateway QoS profile configuration

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'egress_qos_profile_path': 'egress_qos_profile_path',
                            'ingress_qos_profile_path': 'ingress_qos_profile_path',
                            }

    def __init__(self,
                 egress_qos_profile_path=None,
                 ingress_qos_profile_path=None,
                ):
        """
        :type  egress_qos_profile_path: :class:`str` or ``None``
        :param egress_qos_profile_path: Policy path to gateway QoS profile in egress direction.
        :type  ingress_qos_profile_path: :class:`str` or ``None``
        :param ingress_qos_profile_path: Policy path to gateway QoS profile in ingress direction.
        """
        self.egress_qos_profile_path = egress_qos_profile_path
        self.ingress_qos_profile_path = ingress_qos_profile_path
        VapiStruct.__init__(self)


GatewayQosProfileConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.gateway_qos_profile_config', {
        'egress_qos_profile_path': type.OptionalType(type.StringType()),
        'ingress_qos_profile_path': type.OptionalType(type.StringType()),
    },
    GatewayQosProfileConfig,
    False,
    None))



class GatewayQosProfileListResult(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`GatewayQosProfile` or ``None``
        :param results: Paginated list of GatewayQosProfile
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


GatewayQosProfileListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.gateway_qos_profile_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'GatewayQosProfile'))),
    },
    GatewayQosProfileListResult,
    False,
    None))



class GatewayRouteCsvRecord(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'admin_distance': 'admin_distance',
                            'edge_path': 'edge_path',
                            'interface': '_interface',
                            'lr_component_id': 'lr_component_id',
                            'lr_component_type': 'lr_component_type',
                            'network': 'network',
                            'next_hop': 'next_hop',
                            'route_type': 'route_type',
                            }

    def __init__(self,
                 admin_distance=None,
                 edge_path=None,
                 _interface=None,
                 lr_component_id=None,
                 lr_component_type=None,
                 network=None,
                 next_hop=None,
                 route_type=None,
                ):
        """
        :type  admin_distance: :class:`long` or ``None``
        :param admin_distance: The admin distance of the next hop format: int64
        :type  edge_path: :class:`str` or ``None``
        :param edge_path: Edge node policy path.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  _interface: :class:`str` or ``None``
        :param _interface: The policy path of the interface which is used as the next hop
        :type  lr_component_id: :class:`str` or ``None``
        :param lr_component_id: Logical router component(Service Router/Distributed Router) id
        :type  lr_component_type: :class:`str` or ``None``
        :param lr_component_type: Logical router component(Service Router/Distributed Router) type
        :type  network: :class:`str` or ``None``
        :param network: CIDR network address format: ip-cidr-block
        :type  next_hop: :class:`str` or ``None``
        :param next_hop: The IP of the next hop format: ip
        :type  route_type: :class:`str` or ``None``
        :param route_type: Route type (USER, CONNECTED, NSX_INTERNAL,..)
        """
        self.admin_distance = admin_distance
        self.edge_path = edge_path
        self._interface = _interface
        self.lr_component_id = lr_component_id
        self.lr_component_type = lr_component_type
        self.network = network
        self.next_hop = next_hop
        self.route_type = route_type
        VapiStruct.__init__(self)


GatewayRouteCsvRecord._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.gateway_route_csv_record', {
        'admin_distance': type.OptionalType(type.IntegerType()),
        'edge_path': type.OptionalType(type.StringType()),
        'interface': type.OptionalType(type.StringType()),
        'lr_component_id': type.OptionalType(type.StringType()),
        'lr_component_type': type.OptionalType(type.StringType()),
        'network': type.OptionalType(type.StringType()),
        'next_hop': type.OptionalType(type.StringType()),
        'route_type': type.OptionalType(type.StringType()),
    },
    GatewayRouteCsvRecord,
    False,
    None))



class GatewayRouteTableInCsvFormat(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'file_name': 'file_name',
                            'last_update_timestamp': 'last_update_timestamp',
                            'results': 'results',
                            }

    def __init__(self,
                 file_name=None,
                 last_update_timestamp=None,
                 results=None,
                ):
        """
        :type  file_name: :class:`str` or ``None``
        :param file_name: File name set by HTTP server if API returns CSV result as a file.
        :type  last_update_timestamp: :class:`long` or ``None``
        :param last_update_timestamp: Timestamp when the data was last updated; unset if data source has
            never updated the data. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`GatewayRouteCsvRecord` or ``None``
        :param results: 
        """
        self.file_name = file_name
        self.last_update_timestamp = last_update_timestamp
        self.results = results
        VapiStruct.__init__(self)


GatewayRouteTableInCsvFormat._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.gateway_route_table_in_csv_format', {
        'file_name': type.OptionalType(type.StringType()),
        'last_update_timestamp': type.OptionalType(type.IntegerType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'GatewayRouteCsvRecord'))),
    },
    GatewayRouteTableInCsvFormat,
    False,
    None))



class GenericDhcpOption(VapiStruct):
    """
    Define DHCP options other than option 121.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'code': 'code',
                            'values': 'values',
                            }

    def __init__(self,
                 code=None,
                 values=None,
                ):
        """
        :type  code: :class:`long` or ``None``
        :param code: Code of the dhcp option. format: int64
        :type  values: :class:`list` of :class:`str` or ``None``
        :param values: Value of the option.
        """
        self.code = code
        self.values = values
        VapiStruct.__init__(self)


GenericDhcpOption._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.generic_dhcp_option', {
        'code': type.OptionalType(type.IntegerType()),
        'values': type.OptionalType(type.ListType(type.StringType())),
    },
    GenericDhcpOption,
    False,
    None))



class GenericPolicyRealizedResource(VapiStruct):
    """
    Represents realized entity

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    STATE_UNAVAILABLE = "UNAVAILABLE"
    """


    """
    STATE_UNREALIZED = "UNREALIZED"
    """


    """
    STATE_REALIZED = "REALIZED"
    """


    """
    STATE_ERROR = "ERROR"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'alarms': 'alarms',
                            'intent_reference': 'intent_reference',
                            'realization_api': 'realization_api',
                            'realization_specific_identifier': 'realization_specific_identifier',
                            'runtime_error': 'runtime_error',
                            'runtime_status': 'runtime_status',
                            'state': 'state',
                            'enforcement_point_path': 'enforcement_point_path',
                            'entity_type': 'entity_type',
                            'extended_attributes': 'extended_attributes',
                            'intent_paths': 'intent_paths',
                            'site_path': 'site_path',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 alarms=None,
                 intent_reference=None,
                 realization_api=None,
                 realization_specific_identifier=None,
                 runtime_error=None,
                 runtime_status=None,
                 state=None,
                 enforcement_point_path=None,
                 entity_type=None,
                 extended_attributes=None,
                 intent_paths=None,
                 site_path=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  alarms: :class:`list` of :class:`PolicyAlarmResource` or ``None``
        :param alarms: Alarm info detail
        :type  intent_reference: :class:`list` of :class:`str` or ``None``
        :param intent_reference: Desire state paths of this object
        :type  realization_api: :class:`str` or ``None``
        :param realization_api: Realization API of this object on enforcement point
        :type  realization_specific_identifier: :class:`str` or ``None``
        :param realization_specific_identifier: Realization id of this object
        :type  runtime_error: :class:`str` or ``None``
        :param runtime_error: It define the root cause for runtime error.
        :type  runtime_status: :class:`str` or ``None``
        :param runtime_status: Possible values could be UP, DOWN, UNKNOWN, DEGRADED This list is
            not exhaustive.
        :type  state: :class:`str` or ``None``
        :param state: Possible values are: 
            
            * :attr:`GenericPolicyRealizedResource.STATE_UNAVAILABLE`
            * :attr:`GenericPolicyRealizedResource.STATE_UNREALIZED`
            * :attr:`GenericPolicyRealizedResource.STATE_REALIZED`
            * :attr:`GenericPolicyRealizedResource.STATE_ERROR`
            
             Realization state of this object
        :type  enforcement_point_path: :class:`str` or ``None``
        :param enforcement_point_path: The path of the enforcement point.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  entity_type: :class:`str` or ``None``
        :param entity_type: Type of realized entity
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  extended_attributes: :class:`list` of :class:`AttributeVal` or ``None``
        :param extended_attributes: Collection of type specific properties
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  intent_paths: :class:`list` of :class:`str` or ``None``
        :param intent_paths: Collection of intent paths
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  site_path: :class:`str` or ``None``
        :param site_path: The site where this entity resides.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.alarms = alarms
        self.intent_reference = intent_reference
        self.realization_api = realization_api
        self.realization_specific_identifier = realization_specific_identifier
        self.runtime_error = runtime_error
        self.runtime_status = runtime_status
        self.state = state
        self.enforcement_point_path = enforcement_point_path
        self.entity_type = entity_type
        self.extended_attributes = extended_attributes
        self.intent_paths = intent_paths
        self.site_path = site_path
        VapiStruct.__init__(self)


GenericPolicyRealizedResource._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.generic_policy_realized_resource', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'alarms': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyAlarmResource'))),
        'intent_reference': type.OptionalType(type.ListType(type.StringType())),
        'realization_api': type.OptionalType(type.StringType()),
        'realization_specific_identifier': type.OptionalType(type.StringType()),
        'runtime_error': type.OptionalType(type.StringType()),
        'runtime_status': type.OptionalType(type.StringType()),
        'state': type.OptionalType(type.StringType()),
        'enforcement_point_path': type.OptionalType(type.StringType()),
        'entity_type': type.OptionalType(type.StringType()),
        'extended_attributes': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'AttributeVal'))),
        'intent_paths': type.OptionalType(type.ListType(type.StringType())),
        'site_path': type.OptionalType(type.StringType()),
    },
    GenericPolicyRealizedResource,
    False,
    None))



class GenericPolicyRealizedResourceListResult(VapiStruct):
    """
    GenericPolicyRealizedResource list result

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`GenericPolicyRealizedResource` or ``None``
        :param results: List of realized resources
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


GenericPolicyRealizedResourceListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.generic_policy_realized_resource_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'GenericPolicyRealizedResource'))),
    },
    GenericPolicyRealizedResourceListResult,
    False,
    None))



class GlobalConfig(VapiStruct):
    """
    Global configuration

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    L3FORWARDING_MODE_ONLY = "IPV4_ONLY"
    """


    """
    L3FORWARDING_MODE_AND_IPV6 = "IPV4_AND_IPV6"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'fips': 'fips',
                            'l3_forwarding_mode': 'l3_forwarding_mode',
                            'mtu': 'mtu',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 fips=None,
                 l3_forwarding_mode=None,
                 mtu=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  fips: :class:`FIPSGlobalConfig` or ``None``
        :param fips: Contains the FIPSGlobalConfig object.
        :type  l3_forwarding_mode: :class:`str` or ``None``
        :param l3_forwarding_mode: Possible values are: 
            
            * :attr:`GlobalConfig.L3FORWARDING_MODE_ONLY`
            * :attr:`GlobalConfig.L3FORWARDING_MODE_AND_IPV6`
            
            Configure forwarding mode for routing. This setting does not
            restrict configuration for other modes.
        :type  mtu: :class:`long` or ``None``
        :param mtu: Maximum transmission unit (MTU) specifies the size of the largest
            packet that a network protocol can transmit. format: int32
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.fips = fips
        self.l3_forwarding_mode = l3_forwarding_mode
        self.mtu = mtu
        VapiStruct.__init__(self)


GlobalConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.global_config', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'fips': type.OptionalType(type.ReferenceType(__name__, 'FIPSGlobalConfig')),
        'l3_forwarding_mode': type.OptionalType(type.StringType()),
        'mtu': type.OptionalType(type.IntegerType()),
    },
    GlobalConfig,
    False,
    None))



class GlobalManager(VapiStruct):
    """
    Global Manager.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    MODE_ACTIVE = "ACTIVE"
    """


    """
    MODE_STANDBY = "STANDBY"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'connection_info': 'connection_info',
                            'fail_if_rtt_exceeded': 'fail_if_rtt_exceeded',
                            'federation_id': 'federation_id',
                            'maximum_rtt': 'maximum_rtt',
                            'mode': 'mode',
                            'site_id': 'site_id',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 connection_info=None,
                 fail_if_rtt_exceeded=None,
                 federation_id=None,
                 maximum_rtt=None,
                 mode=None,
                 site_id=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  connection_info: :class:`list` of :class:`SiteNodeConnectionInfo` or ``None``
        :param connection_info: To create a standby GM, the connection information (username,
            password, and API thumbprint) for at least one NSX manager node in
            the remote site must be provided. Once the GM has been successfully
            onboarded, the connection_info is discarded and authentication to
            the standby GM occurs using an X.509 client certificate.
        :type  fail_if_rtt_exceeded: :class:`bool` or ``None``
        :param fail_if_rtt_exceeded: Fail onboarding if maximum RTT exceeded.
        :type  federation_id: :class:`str` or ``None``
        :param federation_id: Internally generated UUID to the federation of Global Manager.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  maximum_rtt: :class:`long` or ``None``
        :param maximum_rtt: If provided and fail_if_rtt_exceeded is true, onboarding of the
            site will fail if measured RTT is greater than this value. format:
            int64
        :type  mode: :class:`str` or ``None``
        :param mode: Possible values are: 
            
            * :attr:`GlobalManager.MODE_ACTIVE`
            * :attr:`GlobalManager.MODE_STANDBY`
            
            There can be at most one ACTIVE global manager and one STANDBY
            global manager. In order to add a STANDBY manager, there must be an
            ACTIVE manager defined.
        :type  site_id: :class:`str` or ``None``
        :param site_id: UUID of the site where Global manager is running. This is the Site
            Manager generated UUID for every NSX deployment.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.connection_info = connection_info
        self.fail_if_rtt_exceeded = fail_if_rtt_exceeded
        self.federation_id = federation_id
        self.maximum_rtt = maximum_rtt
        self.mode = mode
        self.site_id = site_id
        VapiStruct.__init__(self)


GlobalManager._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.global_manager', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'connection_info': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'SiteNodeConnectionInfo'))),
        'fail_if_rtt_exceeded': type.OptionalType(type.BooleanType()),
        'federation_id': type.OptionalType(type.StringType()),
        'maximum_rtt': type.OptionalType(type.IntegerType()),
        'mode': type.OptionalType(type.StringType()),
        'site_id': type.OptionalType(type.StringType()),
    },
    GlobalManager,
    False,
    None))



class GlobalManagerConfig(VapiStruct):
    """
    This configuration is distributed to all Sites participating in federation.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'rtep_config': 'rtep_config',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 rtep_config=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  rtep_config: :class:`GmRtepConfig` or ``None``
        :param rtep_config: Global Manager federation RTEP configuration. This configuration is
            distributed to all Sites participating in federation.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.rtep_config = rtep_config
        VapiStruct.__init__(self)


GlobalManagerConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.global_manager_config', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'rtep_config': type.OptionalType(type.ReferenceType(__name__, 'GmRtepConfig')),
    },
    GlobalManagerConfig,
    False,
    None))



class GlobalManagerListResult(VapiStruct):
    """
    Paged Collection of Global Managers.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`GlobalManager` or ``None``
        :param results: Global Manager List Result.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


GlobalManagerListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.global_manager_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'GlobalManager'))),
    },
    GlobalManagerListResult,
    False,
    None))



class GlobalRestoreStatus(VapiStruct):
    """
    Overall restore process status

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    VALUE_INITIAL = "INITIAL"
    """


    """
    VALUE_SUCCESS = "SUCCESS"
    """


    """
    VALUE_FAILED = "FAILED"
    """


    """
    VALUE_RUNNING = "RUNNING"
    """


    """
    VALUE_SUSPENDED_BY_USER = "SUSPENDED_BY_USER"
    """


    """
    VALUE_SUSPENDED_FOR_USER_ACTION = "SUSPENDED_FOR_USER_ACTION"
    """


    """
    VALUE_SUSPENDED = "SUSPENDED"
    """


    """
    VALUE_ABORTED = "ABORTED"
    """


    """



    _canonical_to_pep_names = {
                            'description': 'description',
                            'value': 'value',
                            }

    def __init__(self,
                 description=None,
                 value=None,
                ):
        """
        :type  description: :class:`str` or ``None``
        :param description: A description of the restore status
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  value: :class:`str` or ``None``
        :param value: Possible values are: 
            
            * :attr:`GlobalRestoreStatus.VALUE_INITIAL`
            * :attr:`GlobalRestoreStatus.VALUE_SUCCESS`
            * :attr:`GlobalRestoreStatus.VALUE_FAILED`
            * :attr:`GlobalRestoreStatus.VALUE_RUNNING`
            * :attr:`GlobalRestoreStatus.VALUE_SUSPENDED_BY_USER`
            * :attr:`GlobalRestoreStatus.VALUE_SUSPENDED_FOR_USER_ACTION`
            * :attr:`GlobalRestoreStatus.VALUE_SUSPENDED`
            * :attr:`GlobalRestoreStatus.VALUE_ABORTED`
            
             Global rolled-up restore status value
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.description = description
        self.value = value
        VapiStruct.__init__(self)


GlobalRestoreStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.global_restore_status', {
        'description': type.OptionalType(type.StringType()),
        'value': type.OptionalType(type.StringType()),
    },
    GlobalRestoreStatus,
    False,
    None))



class GmFederationSiteConfig(VapiStruct):
    """
    Additional configuration required for federation at Site.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'transit_subnet': 'transit_subnet',
                            }

    def __init__(self,
                 transit_subnet=None,
                ):
        """
        :type  transit_subnet: :class:`str` or ``None``
        :param transit_subnet: IP Addresses to be allocated for transit segment when the gateway
            is stretched. Note that Global Manager will carve out the IP Pool
            for each site to be used for edge nodes when gateway is stretched
            based on the user provided subnet and maximum number of edge nodes
            allowed per site. format: ip-cidr-block
        """
        self.transit_subnet = transit_subnet
        VapiStruct.__init__(self)


GmFederationSiteConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.gm_federation_site_config', {
        'transit_subnet': type.OptionalType(type.StringType()),
    },
    GmFederationSiteConfig,
    False,
    None))



class GmRtepConfig(VapiStruct):
    """
    Global Manager federation RTEP configuration. This configuration is
    distributed to all Sites participating in federation.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'ibgp_password': 'ibgp_password',
                            }

    def __init__(self,
                 ibgp_password=None,
                ):
        """
        :type  ibgp_password: :class:`str` or ``None``
        :param ibgp_password: Password to authenticate IBGP session between remote tunnel
            endpoints created on federated sites. This is applied to inter-site
            underlay IBGP neighbors created over remote tunnel endpoints on all
            sites. Empty string (\"\") clears existing password.
        """
        self.ibgp_password = ibgp_password
        VapiStruct.__init__(self)


GmRtepConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.gm_rtep_config', {
        'ibgp_password': type.OptionalType(type.StringType()),
    },
    GmRtepConfig,
    False,
    None))



class GraphConfiguration(VapiStruct):
    """
    Represents configuration of a graph widget

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "GraphConfiguration"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    SUB_TYPE_LINE_GRAPH = "LINE_GRAPH"
    """


    """
    SUB_TYPE_BAR_GRAPH = "BAR_GRAPH"
    """


    """
    SUB_TYPE_STACKED_BAR_GRAPH = "STACKED_BAR_GRAPH"
    """


    """



    _canonical_to_pep_names = {
                            'axes': 'axes',
                            'display_x_value': 'displayx_value',
                            'graphs': 'graphs',
                            'navigation': 'navigation',
                            'sub_type': 'sub_type',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'datasources': 'datasources',
                            'default_filter_value': 'default_filter_value',
                            'drilldown_id': 'drilldown_id',
                            'filter': 'filter',
                            'filter_value_required': 'filter_value_required',
                            'footer': 'footer',
                            'icons': 'icons',
                            'is_drilldown': 'is_drilldown',
                            'legend': 'legend',
                            'shared': 'shared',
                            'span': 'span',
                            'weight': 'weight',
                            }

    def __init__(self,
                 axes=None,
                 displayx_value=None,
                 graphs=None,
                 navigation=None,
                 sub_type=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='GraphConfiguration',
                 tags=None,
                 datasources=None,
                 default_filter_value=None,
                 drilldown_id=None,
                 filter=None,
                 filter_value_required=None,
                 footer=None,
                 icons=None,
                 is_drilldown=None,
                 legend=None,
                 shared=None,
                 span=None,
                 weight=None,
                ):
        """
        :type  axes: :class:`Axes` or ``None``
        :param axes: Axes of a graph
        :type  displayx_value: :class:`bool` or ``None``
        :param displayx_value: If true, value of a point is shown as label on X axis. If false,
            value of point is not shown as label on X axis. false can be useful
            in situations where there are too many points and showing the X
            value as label can clutter the X axis.
        :type  graphs: :class:`list` of :class:`GraphDefinition` or ``None``
        :param graphs: Graphs
        :type  navigation: :class:`str` or ``None``
        :param navigation: Hyperlink of the specified UI page that provides details.
        :type  sub_type: :class:`str` or ``None``
        :param sub_type: Possible values are: 
            
            * :attr:`GraphConfiguration.SUB_TYPE_LINE_GRAPH`
            * :attr:`GraphConfiguration.SUB_TYPE_BAR_GRAPH`
            * :attr:`GraphConfiguration.SUB_TYPE_STACKED_BAR_GRAPH`
            
            Describes the the type of graph. LINE_GRAPH shows a line graph
            chart BAR_GRAPH shows a simple bar graph chart STACKED_BAR_GRAPH
            shows a stacked bar graph chart
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Title of the widget. If display_name is omitted, the widget will be
            shown without a title.
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`WidgetConfiguration.RESOURCE_TYPE_LABELVALUECONFIGURATION`
            * :attr:`WidgetConfiguration.RESOURCE_TYPE_DONUTCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_MULTIWIDGETCONFIGURATION`
            * :attr:`WidgetConfiguration.RESOURCE_TYPE_CONTAINERCONFIGURATION`
            * :attr:`WidgetConfiguration.RESOURCE_TYPE_STATSCONFIGURATION`
            * :attr:`WidgetConfiguration.RESOURCE_TYPE_GRIDCONFIGURATION`
            * :attr:`WidgetConfiguration.RESOURCE_TYPE_GRAPHCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_CUSTOMWIDGETCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_DROPDOWNFILTERWIDGETCONFIGURATION`
            
            Supported visualization types are LabelValueConfiguration,
            DonutConfiguration, GridConfiguration, StatsConfiguration,
            MultiWidgetConfiguration, GraphConfiguration,
            ContainerConfiguration, CustomWidgetConfiguration and
            DropdownFilterWidgetConfiguration.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  datasources: :class:`list` of :class:`Datasource` or ``None``
        :param datasources: The 'datasources' represent the sources from which data will be
            fetched. Currently, only NSX-API is supported as a 'default'
            datasource. An example of specifying 'default' datasource along
            with the urls to fetch data from is given at 'example_request'
            section of 'CreateWidgetConfiguration' API.
        :type  default_filter_value: :class:`list` of :class:`DefaultFilterValue` or ``None``
        :param default_filter_value: Default filter values to be passed to datasources. This will be
            used when the report is requested without filter values.
        :type  drilldown_id: :class:`str` or ``None``
        :param drilldown_id: Id of drilldown widget, if any. Id should be a valid id of an
            existing widget. A widget is considered as drilldown widget when it
            is associated with any other widget and provides more detailed
            information about any data item from the parent widget.
        :type  filter: :class:`str` or ``None``
        :param filter: Id of filter widget for subscription, if any. Id should be a valid
            id of an existing filter widget. Filter widget should be from the
            same view. Datasource URLs should have placeholder values equal to
            filter alias to accept the filter value on filter change.
        :type  filter_value_required: :class:`bool` or ``None``
        :param filter_value_required: Flag to indicate that widget will continue to work without filter
            value. If this flag is set to false then default_filter_value is
            manadatory.
        :type  footer: :class:`Footer` or ``None``
        :param footer: 
        :type  icons: :class:`list` of :class:`Icon` or ``None``
        :param icons: Icons to be applied at dashboard for widgets and UI elements.
        :type  is_drilldown: :class:`bool` or ``None``
        :param is_drilldown: Set to true if this widget should be used as a drilldown.
        :type  legend: :class:`Legend` or ``None``
        :param legend: Legend to be displayed. If legend is not needed, do not include it.
        :type  shared: :class:`bool` or ``None``
        :param shared: Please use the property 'shared' of View instead of this. The
            widgets of a shared view are visible to other users.
        :type  span: :class:`long` or ``None``
        :param span: Represents the horizontal span of the widget / container. format:
            int32
        :type  weight: :class:`long` or ``None``
        :param weight: Specify relavite weight in WidgetItem for placement in a view.
            Please see WidgetItem for details. format: int32
        """
        self.axes = axes
        self.displayx_value = displayx_value
        self.graphs = graphs
        self.navigation = navigation
        self.sub_type = sub_type
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.datasources = datasources
        self.default_filter_value = default_filter_value
        self.drilldown_id = drilldown_id
        self.filter = filter
        self.filter_value_required = filter_value_required
        self.footer = footer
        self.icons = icons
        self.is_drilldown = is_drilldown
        self.legend = legend
        self.shared = shared
        self.span = span
        self.weight = weight
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

GraphConfiguration._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.graph_configuration', {
        'axes': type.OptionalType(type.ReferenceType(__name__, 'Axes')),
        'display_x_value': type.OptionalType(type.BooleanType()),
        'graphs': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'GraphDefinition'))),
        'navigation': type.OptionalType(type.StringType()),
        'sub_type': type.OptionalType(type.StringType()),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'datasources': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Datasource'))),
        'default_filter_value': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'DefaultFilterValue'))),
        'drilldown_id': type.OptionalType(type.StringType()),
        'filter': type.OptionalType(type.StringType()),
        'filter_value_required': type.OptionalType(type.BooleanType()),
        'footer': type.OptionalType(type.ReferenceType(__name__, 'Footer')),
        'icons': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Icon'))),
        'is_drilldown': type.OptionalType(type.BooleanType()),
        'legend': type.OptionalType(type.ReferenceType(__name__, 'Legend')),
        'shared': type.OptionalType(type.BooleanType()),
        'span': type.OptionalType(type.IntegerType()),
        'weight': type.OptionalType(type.IntegerType()),
    },
    GraphConfiguration,
    False,
    None))



class GraphDefinition(VapiStruct):
    """
    Defines a graph

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'label': 'label',
                            'point_definition': 'point_definition',
                            'render_configuration': 'render_configuration',
                            }

    def __init__(self,
                 label=None,
                 point_definition=None,
                 render_configuration=None,
                ):
        """
        :type  label: :class:`Label` or ``None``
        :param label: Describes the graph. It labels the entities of graph. If the label
            is not provided then it is not shown for a graph. For example, for
            a single graph, the title of widget can describe the graph and a
            label may not be necessary to be shown.
        :type  point_definition: :class:`PointDefinition` or ``None``
        :param point_definition: Defines the points of a graph.
        :type  render_configuration: :class:`list` of :class:`RenderConfiguration` or ``None``
        :param render_configuration: Additional rendering or conditional evaluation of the field values
            to be performed, if any.
        """
        self.label = label
        self.point_definition = point_definition
        self.render_configuration = render_configuration
        VapiStruct.__init__(self)


GraphDefinition._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.graph_definition', {
        'label': type.OptionalType(type.ReferenceType(__name__, 'Label')),
        'point_definition': type.OptionalType(type.ReferenceType(__name__, 'PointDefinition')),
        'render_configuration': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'RenderConfiguration'))),
    },
    GraphDefinition,
    False,
    None))



class GridConfiguration(VapiStruct):
    """
    Represents configuration of a Grid or Table widget.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "GridConfiguration"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'columns': 'columns',
                            'page_size': 'page_size',
                            'row_list_fields': 'row_list_fields',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'datasources': 'datasources',
                            'default_filter_value': 'default_filter_value',
                            'drilldown_id': 'drilldown_id',
                            'filter': 'filter',
                            'filter_value_required': 'filter_value_required',
                            'footer': 'footer',
                            'icons': 'icons',
                            'is_drilldown': 'is_drilldown',
                            'legend': 'legend',
                            'shared': 'shared',
                            'span': 'span',
                            'weight': 'weight',
                            }

    def __init__(self,
                 columns=None,
                 page_size=None,
                 row_list_fields=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='GridConfiguration',
                 tags=None,
                 datasources=None,
                 default_filter_value=None,
                 drilldown_id=None,
                 filter=None,
                 filter_value_required=None,
                 footer=None,
                 icons=None,
                 is_drilldown=None,
                 legend=None,
                 shared=None,
                 span=None,
                 weight=None,
                ):
        """
        :type  columns: :class:`list` of :class:`ColumnItem` or ``None``
        :param columns: Array of columns of a Grid widget
        :type  page_size: :class:`long` or ``None``
        :param page_size: Number of records per page. page_size will be effective only when
            the urls provided in the datasource support paging. format: int32
        :type  row_list_fields: :class:`list` of :class:`RowListField` or ``None``
        :param row_list_fields: Rows of grid or table are formed from the list of objects returned
            by a row list field.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Title of the widget. If display_name is omitted, the widget will be
            shown without a title.
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`WidgetConfiguration.RESOURCE_TYPE_LABELVALUECONFIGURATION`
            * :attr:`WidgetConfiguration.RESOURCE_TYPE_DONUTCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_MULTIWIDGETCONFIGURATION`
            * :attr:`WidgetConfiguration.RESOURCE_TYPE_CONTAINERCONFIGURATION`
            * :attr:`WidgetConfiguration.RESOURCE_TYPE_STATSCONFIGURATION`
            * :attr:`WidgetConfiguration.RESOURCE_TYPE_GRIDCONFIGURATION`
            * :attr:`WidgetConfiguration.RESOURCE_TYPE_GRAPHCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_CUSTOMWIDGETCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_DROPDOWNFILTERWIDGETCONFIGURATION`
            
            Supported visualization types are LabelValueConfiguration,
            DonutConfiguration, GridConfiguration, StatsConfiguration,
            MultiWidgetConfiguration, GraphConfiguration,
            ContainerConfiguration, CustomWidgetConfiguration and
            DropdownFilterWidgetConfiguration.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  datasources: :class:`list` of :class:`Datasource` or ``None``
        :param datasources: The 'datasources' represent the sources from which data will be
            fetched. Currently, only NSX-API is supported as a 'default'
            datasource. An example of specifying 'default' datasource along
            with the urls to fetch data from is given at 'example_request'
            section of 'CreateWidgetConfiguration' API.
        :type  default_filter_value: :class:`list` of :class:`DefaultFilterValue` or ``None``
        :param default_filter_value: Default filter values to be passed to datasources. This will be
            used when the report is requested without filter values.
        :type  drilldown_id: :class:`str` or ``None``
        :param drilldown_id: Id of drilldown widget, if any. Id should be a valid id of an
            existing widget. A widget is considered as drilldown widget when it
            is associated with any other widget and provides more detailed
            information about any data item from the parent widget.
        :type  filter: :class:`str` or ``None``
        :param filter: Id of filter widget for subscription, if any. Id should be a valid
            id of an existing filter widget. Filter widget should be from the
            same view. Datasource URLs should have placeholder values equal to
            filter alias to accept the filter value on filter change.
        :type  filter_value_required: :class:`bool` or ``None``
        :param filter_value_required: Flag to indicate that widget will continue to work without filter
            value. If this flag is set to false then default_filter_value is
            manadatory.
        :type  footer: :class:`Footer` or ``None``
        :param footer: 
        :type  icons: :class:`list` of :class:`Icon` or ``None``
        :param icons: Icons to be applied at dashboard for widgets and UI elements.
        :type  is_drilldown: :class:`bool` or ``None``
        :param is_drilldown: Set to true if this widget should be used as a drilldown.
        :type  legend: :class:`Legend` or ``None``
        :param legend: Legend to be displayed. If legend is not needed, do not include it.
        :type  shared: :class:`bool` or ``None``
        :param shared: Please use the property 'shared' of View instead of this. The
            widgets of a shared view are visible to other users.
        :type  span: :class:`long` or ``None``
        :param span: Represents the horizontal span of the widget / container. format:
            int32
        :type  weight: :class:`long` or ``None``
        :param weight: Specify relavite weight in WidgetItem for placement in a view.
            Please see WidgetItem for details. format: int32
        """
        self.columns = columns
        self.page_size = page_size
        self.row_list_fields = row_list_fields
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.datasources = datasources
        self.default_filter_value = default_filter_value
        self.drilldown_id = drilldown_id
        self.filter = filter
        self.filter_value_required = filter_value_required
        self.footer = footer
        self.icons = icons
        self.is_drilldown = is_drilldown
        self.legend = legend
        self.shared = shared
        self.span = span
        self.weight = weight
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

GridConfiguration._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.grid_configuration', {
        'columns': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ColumnItem'))),
        'page_size': type.OptionalType(type.IntegerType()),
        'row_list_fields': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'RowListField'))),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'datasources': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Datasource'))),
        'default_filter_value': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'DefaultFilterValue'))),
        'drilldown_id': type.OptionalType(type.StringType()),
        'filter': type.OptionalType(type.StringType()),
        'filter_value_required': type.OptionalType(type.BooleanType()),
        'footer': type.OptionalType(type.ReferenceType(__name__, 'Footer')),
        'icons': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Icon'))),
        'is_drilldown': type.OptionalType(type.BooleanType()),
        'legend': type.OptionalType(type.ReferenceType(__name__, 'Legend')),
        'shared': type.OptionalType(type.BooleanType()),
        'span': type.OptionalType(type.IntegerType()),
        'weight': type.OptionalType(type.IntegerType()),
    },
    GridConfiguration,
    False,
    None))



class Group(VapiStruct):
    """
    Group.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    STATE_IN_PROGRESS = "IN_PROGRESS"
    """


    """
    STATE_SUCCESS = "SUCCESS"
    """


    """
    STATE_FAILURE = "FAILURE"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'expression': 'expression',
                            'extended_expression': 'extended_expression',
                            'reference': 'reference',
                            'state': 'state',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 expression=None,
                 extended_expression=None,
                 reference=None,
                 state=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  expression: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param expression: The expression list must follow below criteria: 1. A non-empty
            expression list, must be of odd size. In a list, with indices
            starting from 0, all non-conjunction expressions must be at even
            indices, separated by a conjunction expression at odd indices. 2.
            The total of ConditionExpression and NestedExpression in a list
            should not exceed 5. 3. The total of IPAddressExpression,
            MACAddressExpression, external IDs in an ExternalIDExpression and
            paths in a PathExpression must not exceed 500. 4. Each expression
            must be a valid Expression. See the definition of the Expression
            type for more information.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`Expression`. When methods return a value of this class as a
            return value, the attribute will contain all the attributes defined
            in :class:`Expression`.
        :type  extended_expression: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param extended_expression: Extended Expression allows additional higher level context to be
            specified for grouping criteria. (e.g. user AD group) This field
            allow users to specified user context as the source of a firewall
            rule for IDFW feature. Current version only support a single
            IdentityGroupExpression. In the future, this might expand to
            support other conjunction and non-conjunction expression. The
            extended expression list must follow below criteria: 1. Contains a
            single IdentityGroupExpression. No conjunction expression is
            supported. 2. No other non-conjunction expression is supported,
            except for IdentityGroupExpression. 3. Each expression must be a
            valid Expression. See the definition of the Expression type for
            more information. 4. Extended expression are implicitly AND with
            expression. 5. No nesting can be supported if this value is used.
            6. If a Group is using extended expression, this group must be the
            only member in the source field of an communication map.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`Expression`. When methods return a value of this class as a
            return value, the attribute will contain all the attributes defined
            in :class:`Expression`.
        :type  reference: :class:`bool` or ``None``
        :param reference: If true, indicates that this is a remote reference group. Such
            group will have span different from the its parent domain. Default
            value is false.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  state: :class:`str` or ``None``
        :param state: Possible values are: 
            
            * :attr:`Group.STATE_IN_PROGRESS`
            * :attr:`Group.STATE_SUCCESS`
            * :attr:`Group.STATE_FAILURE`
            
             Realization state of this group
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.expression = expression
        self.extended_expression = extended_expression
        self.reference = reference
        self.state = state
        VapiStruct.__init__(self)


Group._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.group', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'expression': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'Expression')]))),
        'extended_expression': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'Expression')]))),
        'reference': type.OptionalType(type.BooleanType()),
        'state': type.OptionalType(type.StringType()),
    },
    Group,
    False,
    None))



class GroupDiscoveryProfileBindingMap(VapiStruct):
    """
    This entity will be used to establish association between discovery profile
    and Group. With this entity, user can specify intent for applying discovery
    profile profile to particular Group.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'profile_path': 'profile_path',
                            'sequence_number': 'sequence_number',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 profile_path=None,
                 sequence_number=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  profile_path: :class:`str` or ``None``
        :param profile_path: PolicyPath of associated Profile
        :type  sequence_number: :class:`long` or ``None``
        :param sequence_number: Sequence number used to resolve conflicts betweeen two profiles
            applied on the same group. Lower sequence number takes higher
            precedence. Two binding maps applied to the same profile must have
            the same sequence number. User defined sequence numbers range from
            1 through 100,000. System defined sequence numbers range from
            100,001 through 200,000. format: int64
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.profile_path = profile_path
        self.sequence_number = sequence_number
        VapiStruct.__init__(self)


GroupDiscoveryProfileBindingMap._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.group_discovery_profile_binding_map', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'profile_path': type.OptionalType(type.StringType()),
        'sequence_number': type.OptionalType(type.IntegerType()),
    },
    GroupDiscoveryProfileBindingMap,
    False,
    None))



class GroupInfo(VapiStruct):
    """
    GroupInfo contains information about a particular Group used in Redirection
    Rules. It also contains information about policy path, if the group is
    created from Policy.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'group': 'group',
                            'group_policy_path': 'group_policy_path',
                            }

    def __init__(self,
                 group=None,
                 group_policy_path=None,
                ):
        """
        :type  group: :class:`ResourceReference` or ``None``
        :param group: Group Data.
        :type  group_policy_path: :class:`str` or ``None``
        :param group_policy_path: Policy path of a particular Group.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.group = group
        self.group_policy_path = group_policy_path
        VapiStruct.__init__(self)


GroupInfo._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.group_info', {
        'group': type.OptionalType(type.ReferenceType(__name__, 'ResourceReference')),
        'group_policy_path': type.OptionalType(type.StringType()),
    },
    GroupInfo,
    False,
    None))



class GroupListResult(VapiStruct):
    """
    Paged Collection of Groups

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`Group` or ``None``
        :param results: Group list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


GroupListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.group_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Group'))),
    },
    GroupListResult,
    False,
    None))



class GroupMemberList(VapiStruct):
    """
    List of same type members to either add or remove from a group.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'members': 'members',
                            }

    def __init__(self,
                 members=None,
                ):
        """
        :type  members: :class:`list` of :class:`str` or ``None``
        :param members: This array contains group members of similar types.
        """
        self.members = members
        VapiStruct.__init__(self)


GroupMemberList._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.group_member_list', {
        'members': type.OptionalType(type.ListType(type.StringType())),
    },
    GroupMemberList,
    False,
    None))



class GroupMemberTagsList(VapiStruct):
    """
    Collection of tags used in a policy group for a particular member type

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'member_type': 'member_type',
                            'tags': 'tags',
                            }

    def __init__(self,
                 member_type=None,
                 tags=None,
                ):
        """
        :type  member_type: :class:`str` or ``None``
        :param member_type: Member type for which we will list the tags
        :type  tags: :class:`list` of :class:`str` or ``None``
        :param tags: List of tags for the member type
        """
        self.member_type = member_type
        self.tags = tags
        VapiStruct.__init__(self)


GroupMemberTagsList._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.group_member_tags_list', {
        'member_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.StringType())),
    },
    GroupMemberTagsList,
    False,
    None))



class GroupMemberTypeListResult(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    RESULTS_VIRTUALMACHINE = "VirtualMachine"
    """


    """
    RESULTS_VIRTUALNETWORKINTERFACE = "VirtualNetworkInterface"
    """


    """
    RESULTS_SEGMENTPORT = "SegmentPort"
    """


    """
    RESULTS_SEGMENT = "Segment"
    """


    """
    RESULTS_CLOUDNATIVESERVICEINSTANCE = "CloudNativeServiceInstance"
    """


    """
    RESULTS_IPADDRESS = "IPAddress"
    """


    """
    RESULTS_MACADDRESS = "MACAddress"
    """


    """
    RESULTS_IPSET = "IPSet"
    """


    """
    RESULTS_IDENTITYGROUP = "IdentityGroup"
    """


    """
    RESULTS_PHYSICALSERVER = "PhysicalServer"
    """


    """



    _canonical_to_pep_names = {
                            'result_count': 'result_count',
                            'results': 'results',
                            }

    def __init__(self,
                 result_count=None,
                 results=None,
                ):
        """
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of the member types in the results array format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`str` or ``None``
        :param results: Possible values are: 
            
            * :attr:`GroupMemberTypeListResult.RESULTS_VIRTUALMACHINE`
            * :attr:`GroupMemberTypeListResult.RESULTS_VIRTUALNETWORKINTERFACE`
            * :attr:`GroupMemberTypeListResult.RESULTS_SEGMENTPORT`
            * :attr:`GroupMemberTypeListResult.RESULTS_SEGMENT`
            *
              :attr:`GroupMemberTypeListResult.RESULTS_CLOUDNATIVESERVICEINSTANCE`
            * :attr:`GroupMemberTypeListResult.RESULTS_IPADDRESS`
            * :attr:`GroupMemberTypeListResult.RESULTS_MACADDRESS`
            * :attr:`GroupMemberTypeListResult.RESULTS_IPSET`
            * :attr:`GroupMemberTypeListResult.RESULTS_IDENTITYGROUP`
            * :attr:`GroupMemberTypeListResult.RESULTS_PHYSICALSERVER`
            
             Collection of member types for the given Group
        """
        self.result_count = result_count
        self.results = results
        VapiStruct.__init__(self)


GroupMemberTypeListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.group_member_type_list_result', {
        'result_count': type.OptionalType(type.IntegerType()),
        'results': type.OptionalType(type.ListType(type.StringType())),
    },
    GroupMemberTypeListResult,
    False,
    None))



class GroupMonitoringProfileBindingMap(VapiStruct):
    """
    This entity will be used to establish association between monitoring
    profile and Group. Using this entity, you can specify intent for applying
    monitoring profile to particular Group. Group with membership criteria vm
    only supported as source group. Port mirroring is only supported on group
    with five vms.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'ipfix_dfw_profile_path': 'ipfix_dfw_profile_path',
                            'ipfix_l2_profile_path': 'ipfix_l2_profile_path',
                            'port_mirroring_profile_path': 'port_mirroring_profile_path',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 ipfix_dfw_profile_path=None,
                 ipfix_l2_profile_path=None,
                 port_mirroring_profile_path=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  ipfix_dfw_profile_path: :class:`str` or ``None``
        :param ipfix_dfw_profile_path: PolicyPath of associated IPFIX DFW Profile
        :type  ipfix_l2_profile_path: :class:`str` or ``None``
        :param ipfix_l2_profile_path: PolicyPath of associated IPFIX L2 Profile
        :type  port_mirroring_profile_path: :class:`str` or ``None``
        :param port_mirroring_profile_path: PolicyPath of associated Port Mirroring Profile
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.ipfix_dfw_profile_path = ipfix_dfw_profile_path
        self.ipfix_l2_profile_path = ipfix_l2_profile_path
        self.port_mirroring_profile_path = port_mirroring_profile_path
        VapiStruct.__init__(self)


GroupMonitoringProfileBindingMap._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.group_monitoring_profile_binding_map', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'ipfix_dfw_profile_path': type.OptionalType(type.StringType()),
        'ipfix_l2_profile_path': type.OptionalType(type.StringType()),
        'port_mirroring_profile_path': type.OptionalType(type.StringType()),
    },
    GroupMonitoringProfileBindingMap,
    False,
    None))



class GroupMonitoringProfileBindingMapListResult(VapiStruct):
    """
    Paged collection of Group Monitoring Profile Binding Maps

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`GroupMonitoringProfileBindingMap` or ``None``
        :param results: Group Monitoring Profile Binding Map list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


GroupMonitoringProfileBindingMapListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.group_monitoring_profile_binding_map_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'GroupMonitoringProfileBindingMap'))),
    },
    GroupMonitoringProfileBindingMapListResult,
    False,
    None))



class GroupTagsList(VapiStruct):
    """
    Collection of tags used in a policy group listed per member type

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'results': 'results',
                            }

    def __init__(self,
                 results=None,
                ):
        """
        :type  results: :class:`list` of :class:`GroupMemberTagsList` or ``None``
        :param results: Collection of tags used in a policy group listed per member type
        """
        self.results = results
        VapiStruct.__init__(self)


GroupTagsList._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.group_tags_list', {
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'GroupMemberTagsList'))),
    },
    GroupTagsList,
    False,
    None))



class GuestInfo(VapiStruct):
    """
    Guest virtual machine details include OS name and computer name of guest
    VM.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'computer_name': 'computer_name',
                            'os_name': 'os_name',
                            }

    def __init__(self,
                 computer_name=None,
                 os_name=None,
                ):
        """
        :type  computer_name: :class:`str` or ``None``
        :param computer_name: Computer name of guest virtual machine, which is set inside guest
            OS. Currently this is supported for guests on ESXi that have VMware
            Tools installed.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  os_name: :class:`str` or ``None``
        :param os_name: OS name of guest virtual machine. Currently this is supported for
            guests on ESXi that have VMware Tools installed.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.computer_name = computer_name
        self.os_name = os_name
        VapiStruct.__init__(self)


GuestInfo._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.guest_info', {
        'computer_name': type.OptionalType(type.StringType()),
        'os_name': type.OptionalType(type.StringType()),
    },
    GuestInfo,
    False,
    None))



class Header(VapiStruct):
    """
    Header of a widget that provides additional information. This will be shown
    at the container level. It includes details as label value pairs.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    CONTENT_ALIGNMENT_LEFT = "LEFT"
    """


    """
    CONTENT_ALIGNMENT_RIGHT = "RIGHT"
    """


    """



    _canonical_to_pep_names = {
                            'condition': 'condition',
                            'content_alignment': 'content_alignment',
                            'sub_headers': 'sub_headers',
                            }

    def __init__(self,
                 condition=None,
                 content_alignment=None,
                 sub_headers=None,
                ):
        """
        :type  condition: :class:`str` or ``None``
        :param condition: If the condition is met then the header will be applied. Examples
            of expression syntax are provided under 'example_request' section
            of 'CreateWidgetConfiguration' API.
        :type  content_alignment: :class:`str` or ``None``
        :param content_alignment: Possible values are: 
            
            * :attr:`Header.CONTENT_ALIGNMENT_LEFT`
            * :attr:`Header.CONTENT_ALIGNMENT_RIGHT`
            
             Alignment of header labels.
        :type  sub_headers: :class:`list` of :class:`PropertyItem` or ``None``
        :param sub_headers: An array of label-value properties.
        """
        self.condition = condition
        self.content_alignment = content_alignment
        self.sub_headers = sub_headers
        VapiStruct.__init__(self)


Header._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.header', {
        'condition': type.OptionalType(type.StringType()),
        'content_alignment': type.OptionalType(type.StringType()),
        'sub_headers': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PropertyItem'))),
    },
    Header,
    False,
    None))



class HttpPolicyLbMonitorProfile(VapiStruct):
    """
    Active healthchecks are disabled by default and can be enabled for a server
    pool by binding a health monitor to the Group through the PolicyLbRule
    object. This represents active health monitoring over HTTP. Active
    healthchecks are initiated periodically, at a configurable interval, to
    each member of the Group. Only if a healthcheck fails consecutively for a
    specified number of times (fall_count) to a member will the member status
    be marked DOWN. Once a member is DOWN, a specified number of consecutive
    successful healthchecks (rise_count) will bring the member back to UP
    state. After a healthcheck is initiated, if it does not complete within a
    certain period, then also the healthcheck is considered to be unsuccessful.
    Completing a healthcheck within timeout means establishing a connection
    (TCP or SSL), if applicable, sending the request and receiving the
    response, all within the configured timeout.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "HttpPolicyLbMonitorProfile"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'url': 'url',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'fall_count': 'fall_count',
                            'interval': 'interval',
                            'monitor_port': 'monitor_port',
                            'rise_count': 'rise_count',
                            'timeout': 'timeout',
                            }

    def __init__(self,
                 url=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='HttpPolicyLbMonitorProfile',
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 fall_count=None,
                 interval=None,
                 monitor_port=None,
                 rise_count=None,
                 timeout=None,
                ):
        """
        :type  url: :class:`str` or ``None``
        :param url: For HTTP active healthchecks, the HTTP request url sent can be
            customized and can include query parameters.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`PolicyLbMonitorProfile.RESOURCE_TYPE_TCPPOLICYLBMONITORPROFILE`
            *
              :attr:`PolicyLbMonitorProfile.RESOURCE_TYPE_UDPPOLICYLBMONITORPROFILE`
            *
              :attr:`PolicyLbMonitorProfile.RESOURCE_TYPE_ICMPPOLICYLBMONITORPROFILE`
            *
              :attr:`PolicyLbMonitorProfile.RESOURCE_TYPE_HTTPPOLICYLBMONITORPROFILE`
            *
              :attr:`PolicyLbMonitorProfile.RESOURCE_TYPE_HTTPSPOLICYLBMONITORPROFILE`
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  fall_count: :class:`long` or ``None``
        :param fall_count: Only if a healthcheck fails consecutively for a specified number of
            times, given with fall_count, to a member will the member status be
            marked DOWN. format: int64
        :type  interval: :class:`long` or ``None``
        :param interval: Active healthchecks are initiated periodically, at a configurable
            interval (in seconds), to each member of the Group. format: int64
        :type  monitor_port: :class:`long` or ``None``
        :param monitor_port: Typically, monitors perform healthchecks to Group members using the
            member IP address and pool_port. However, in some cases, customers
            prefer to run healthchecks against a different port than the pool
            member port which handles actual application traffic. In such
            cases, the port to run healthchecks against can be specified in the
            monitor_port value. format: int32
        :type  rise_count: :class:`long` or ``None``
        :param rise_count: Once a member is DOWN, a specified number of consecutive successful
            healthchecks specified by rise_count will bring the member back to
            UP state. format: int64
        :type  timeout: :class:`long` or ``None``
        :param timeout: Timeout specified in seconds. After a healthcheck is initiated, if
            it does not complete within a certain period, then also the
            healthcheck is considered to be unsuccessful. Completing a
            healthcheck within timeout means establishing a connection (TCP or
            SSL), if applicable, sending the request and receiving the
            response, all within the configured timeout. format: int64
        """
        self.url = url
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.fall_count = fall_count
        self.interval = interval
        self.monitor_port = monitor_port
        self.rise_count = rise_count
        self.timeout = timeout
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

HttpPolicyLbMonitorProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.http_policy_lb_monitor_profile', {
        'url': type.OptionalType(type.StringType()),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'fall_count': type.OptionalType(type.IntegerType()),
        'interval': type.OptionalType(type.IntegerType()),
        'monitor_port': type.OptionalType(type.IntegerType()),
        'rise_count': type.OptionalType(type.IntegerType()),
        'timeout': type.OptionalType(type.IntegerType()),
    },
    HttpPolicyLbMonitorProfile,
    False,
    None))



class HttpPolicyLbVirtualServer(VapiStruct):
    """
    Virtual server acts as a facade to an application, receives all client
    connections over HTTP and distributes them among the backend servers.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "HttpPolicyLbVirtualServer"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'insert_client_ip_header': 'insert_client_ip_header',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'access_log_enabled': 'access_log_enabled',
                            'ip_address': 'ip_address',
                            'lb_persistence_profile': 'lb_persistence_profile',
                            'ports': 'ports',
                            'router_path': 'router_path',
                            'traffic_source': 'traffic_source',
                            }

    def __init__(self,
                 insert_client_ip_header=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='HttpPolicyLbVirtualServer',
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 access_log_enabled=None,
                 ip_address=None,
                 lb_persistence_profile=None,
                 ports=None,
                 router_path=None,
                 traffic_source=None,
                ):
        """
        :type  insert_client_ip_header: :class:`bool` or ``None``
        :param insert_client_ip_header: Backend web servers typically log each request they handle along
            with the requesting client IP address. These logs are used for
            debugging, analytics and other such purposes. If the deployment
            topology requires enabling SNAT on the load balancer, then server
            will see the client as the SNAT IP which defeats the purpose of
            logging. To work around this issue, load balancer can be configured
            to insert XFF HTTP header with the original client IP address.
            Backend servers can then be configured to log the IP address in XFF
            header instead of the source IP address of the connection. If XFF
            header is not present in the incoming request, load balancer
            inserts a new XFF header with the client IP address.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`PolicyLbVirtualServer.RESOURCE_TYPE_TCPPOLICYLBVIRTUALSERVER`
            *
              :attr:`PolicyLbVirtualServer.RESOURCE_TYPE_UDPPOLICYLBVIRTUALSERVER`
            *
              :attr:`PolicyLbVirtualServer.RESOURCE_TYPE_HTTPPOLICYLBVIRTUALSERVER`
            *
              :attr:`PolicyLbVirtualServer.RESOURCE_TYPE_HTTPSPOLICYLBVIRTUALSERVER`
            *
              :attr:`PolicyLbVirtualServer.RESOURCE_TYPE_CUSTOMPOLICYLBVIRTUALSERVER`
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  access_log_enabled: :class:`bool` or ``None``
        :param access_log_enabled: If access log is enabled, all HTTP requests sent to an L7 virtual
            server are logged to the access log file. Both successful requests
            (backend server returns 2xx) and unsuccessful requests (backend
            server returns 4xx or 5xx) are logged to access log, if enabled.
        :type  ip_address: :class:`str` or ``None``
        :param ip_address: Configures the IP address of the PolicyLbVirtualServer where it
            receives all client connections and distributes them among the
            backend servers. format: ip
        :type  lb_persistence_profile: :class:`str` or ``None``
        :param lb_persistence_profile: Path to optional object that enables persistence on a virtual
            server allowing related client connections to be sent to the same
            backend server. Persistence is disabled by default.
        :type  ports: :class:`list` of :class:`str` or ``None``
        :param ports: Ports contains a list of at least one port or port range such as
            \"80\", \"1234-1236\". Each port element in the list should be a
            single port or a single port range. format: port-or-range
        :type  router_path: :class:`str` or ``None``
        :param router_path: Path to router type object that PolicyLbVirtualServer connects to.
            The only supported router object is Network.
        :type  traffic_source: :class:`str` or ``None``
        :param traffic_source: 
        """
        self.insert_client_ip_header = insert_client_ip_header
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.access_log_enabled = access_log_enabled
        self.ip_address = ip_address
        self.lb_persistence_profile = lb_persistence_profile
        self.ports = ports
        self.router_path = router_path
        self.traffic_source = traffic_source
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

HttpPolicyLbVirtualServer._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.http_policy_lb_virtual_server', {
        'insert_client_ip_header': type.OptionalType(type.BooleanType()),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'access_log_enabled': type.OptionalType(type.BooleanType()),
        'ip_address': type.OptionalType(type.StringType()),
        'lb_persistence_profile': type.OptionalType(type.StringType()),
        'ports': type.OptionalType(type.ListType(type.StringType())),
        'router_path': type.OptionalType(type.StringType()),
        'traffic_source': type.OptionalType(type.StringType()),
    },
    HttpPolicyLbVirtualServer,
    False,
    None))



class HttpsPolicyLbMonitorProfile(VapiStruct):
    """
    Active healthchecks are disabled by default and can be enabled for a server
    pool by binding a health monitor to the Group through the PolicyLbRule
    object. This represents active health monitoring over HTTPS. Active
    healthchecks are initiated periodically, at a configurable interval, to
    each member of the Group. Only if a healthcheck fails consecutively for a
    specified number of times (fall_count) to a member will the member status
    be marked DOWN. Once a member is DOWN, a specified number of consecutive
    successful healthchecks (rise_count) will bring the member back to UP
    state. After a healthcheck is initiated, if it does not complete within a
    certain period, then also the healthcheck is considered to be unsuccessful.
    Completing a healthcheck within timeout means establishing a connection
    (TCP or SSL), if applicable, sending the request and receiving the
    response, all within the configured timeout.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'url': 'url',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'fall_count': 'fall_count',
                            'interval': 'interval',
                            'monitor_port': 'monitor_port',
                            'rise_count': 'rise_count',
                            'timeout': 'timeout',
                            }

    def __init__(self,
                 url=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 fall_count=None,
                 interval=None,
                 monitor_port=None,
                 rise_count=None,
                 timeout=None,
                ):
        """
        :type  url: :class:`str` or ``None``
        :param url: For HTTP active healthchecks, the HTTP request url sent can be
            customized and can include query parameters.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`PolicyLbMonitorProfile.RESOURCE_TYPE_TCPPOLICYLBMONITORPROFILE`
            *
              :attr:`PolicyLbMonitorProfile.RESOURCE_TYPE_UDPPOLICYLBMONITORPROFILE`
            *
              :attr:`PolicyLbMonitorProfile.RESOURCE_TYPE_ICMPPOLICYLBMONITORPROFILE`
            *
              :attr:`PolicyLbMonitorProfile.RESOURCE_TYPE_HTTPPOLICYLBMONITORPROFILE`
            *
              :attr:`PolicyLbMonitorProfile.RESOURCE_TYPE_HTTPSPOLICYLBMONITORPROFILE`
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  fall_count: :class:`long` or ``None``
        :param fall_count: Only if a healthcheck fails consecutively for a specified number of
            times, given with fall_count, to a member will the member status be
            marked DOWN. format: int64
        :type  interval: :class:`long` or ``None``
        :param interval: Active healthchecks are initiated periodically, at a configurable
            interval (in seconds), to each member of the Group. format: int64
        :type  monitor_port: :class:`long` or ``None``
        :param monitor_port: Typically, monitors perform healthchecks to Group members using the
            member IP address and pool_port. However, in some cases, customers
            prefer to run healthchecks against a different port than the pool
            member port which handles actual application traffic. In such
            cases, the port to run healthchecks against can be specified in the
            monitor_port value. format: int32
        :type  rise_count: :class:`long` or ``None``
        :param rise_count: Once a member is DOWN, a specified number of consecutive successful
            healthchecks specified by rise_count will bring the member back to
            UP state. format: int64
        :type  timeout: :class:`long` or ``None``
        :param timeout: Timeout specified in seconds. After a healthcheck is initiated, if
            it does not complete within a certain period, then also the
            healthcheck is considered to be unsuccessful. Completing a
            healthcheck within timeout means establishing a connection (TCP or
            SSL), if applicable, sending the request and receiving the
            response, all within the configured timeout. format: int64
        """
        self.url = url
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.fall_count = fall_count
        self.interval = interval
        self.monitor_port = monitor_port
        self.rise_count = rise_count
        self.timeout = timeout
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

HttpsPolicyLbMonitorProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.https_policy_lb_monitor_profile', {
        'url': type.OptionalType(type.StringType()),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'fall_count': type.OptionalType(type.IntegerType()),
        'interval': type.OptionalType(type.IntegerType()),
        'monitor_port': type.OptionalType(type.IntegerType()),
        'rise_count': type.OptionalType(type.IntegerType()),
        'timeout': type.OptionalType(type.IntegerType()),
    },
    HttpsPolicyLbMonitorProfile,
    False,
    None))



class HttpsPolicyLbVirtualServer(VapiStruct):
    """
    Virtual server acts as a facade to an application, receives all client
    connections over HTTPS and distributes them among the backend servers.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    CLIENT_SSL_SETTINGS_BASE_SECURE_111317 = "BASE_SECURE_111317"
    """


    """
    CLIENT_SSL_SETTINGS_MODERATE_SECURE_111317 = "MODERATE_SECURE_111317"
    """


    """
    CLIENT_SSL_SETTINGS_HIGH_SECURE_111317 = "HIGH_SECURE_111317"
    """


    """



    _canonical_to_pep_names = {
                            'client_ssl_certificate_ids': 'client_ssl_certificate_ids',
                            'client_ssl_settings': 'client_ssl_settings',
                            'default_client_ssl_certificate_id': 'default_client_ssl_certificate_id',
                            'insert_client_ip_header': 'insert_client_ip_header',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'access_log_enabled': 'access_log_enabled',
                            'ip_address': 'ip_address',
                            'lb_persistence_profile': 'lb_persistence_profile',
                            'ports': 'ports',
                            'router_path': 'router_path',
                            'traffic_source': 'traffic_source',
                            }

    def __init__(self,
                 client_ssl_certificate_ids=None,
                 client_ssl_settings=None,
                 default_client_ssl_certificate_id=None,
                 insert_client_ip_header=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 access_log_enabled=None,
                 ip_address=None,
                 lb_persistence_profile=None,
                 ports=None,
                 router_path=None,
                 traffic_source=None,
                ):
        """
        :type  client_ssl_certificate_ids: :class:`list` of :class:`str` or ``None``
        :param client_ssl_certificate_ids: Client-side SSL profile binding allows multiple certificates, for
            different hostnames, to be bound to the same virtual server. The
            setting is used when load balancer acts as an SSL server and
            terminating the client SSL connection
        :type  client_ssl_settings: :class:`str` or ``None``
        :param client_ssl_settings: Possible values are: 
            
            *
              :attr:`HttpsPolicyLbVirtualServer.CLIENT_SSL_SETTINGS_BASE_SECURE_111317`
            *
              :attr:`HttpsPolicyLbVirtualServer.CLIENT_SSL_SETTINGS_MODERATE_SECURE_111317`
            *
              :attr:`HttpsPolicyLbVirtualServer.CLIENT_SSL_SETTINGS_HIGH_SECURE_111317`
            
            Security settings representing various security settings when the
            VirtualServer acts as an SSL server - BASE_SECURE_111317 -
            MODERATE_SECURE_111317 - HIGH_SECURE_111317
        :type  default_client_ssl_certificate_id: :class:`str` or ``None``
        :param default_client_ssl_certificate_id: The setting is used when load balancer acts as an SSL server and
            terminating the client SSL connection. A default certificate should
            be specified which will be used if the server does not host
            multiple hostnames on the same IP address or if the client does not
            support SNI extension.
        :type  insert_client_ip_header: :class:`bool` or ``None``
        :param insert_client_ip_header: Backend web servers typically log each request they handle along
            with the requesting client IP address. These logs are used for
            debugging, analytics and other such purposes. If the deployment
            topology requires enabling SNAT on the load balancer, then server
            will see the client as the SNAT IP which defeats the purpose of
            logging. To work around this issue, load balancer can be configured
            to insert XFF HTTP header with the original client IP address.
            Backend servers can then be configured to log the IP address in XFF
            header instead of the source IP address of the connection. If XFF
            header is not present in the incoming request, load balancer
            inserts a new XFF header with the client IP address.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`PolicyLbVirtualServer.RESOURCE_TYPE_TCPPOLICYLBVIRTUALSERVER`
            *
              :attr:`PolicyLbVirtualServer.RESOURCE_TYPE_UDPPOLICYLBVIRTUALSERVER`
            *
              :attr:`PolicyLbVirtualServer.RESOURCE_TYPE_HTTPPOLICYLBVIRTUALSERVER`
            *
              :attr:`PolicyLbVirtualServer.RESOURCE_TYPE_HTTPSPOLICYLBVIRTUALSERVER`
            *
              :attr:`PolicyLbVirtualServer.RESOURCE_TYPE_CUSTOMPOLICYLBVIRTUALSERVER`
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  access_log_enabled: :class:`bool` or ``None``
        :param access_log_enabled: If access log is enabled, all HTTP requests sent to an L7 virtual
            server are logged to the access log file. Both successful requests
            (backend server returns 2xx) and unsuccessful requests (backend
            server returns 4xx or 5xx) are logged to access log, if enabled.
        :type  ip_address: :class:`str` or ``None``
        :param ip_address: Configures the IP address of the PolicyLbVirtualServer where it
            receives all client connections and distributes them among the
            backend servers. format: ip
        :type  lb_persistence_profile: :class:`str` or ``None``
        :param lb_persistence_profile: Path to optional object that enables persistence on a virtual
            server allowing related client connections to be sent to the same
            backend server. Persistence is disabled by default.
        :type  ports: :class:`list` of :class:`str` or ``None``
        :param ports: Ports contains a list of at least one port or port range such as
            \"80\", \"1234-1236\". Each port element in the list should be a
            single port or a single port range. format: port-or-range
        :type  router_path: :class:`str` or ``None``
        :param router_path: Path to router type object that PolicyLbVirtualServer connects to.
            The only supported router object is Network.
        :type  traffic_source: :class:`str` or ``None``
        :param traffic_source: 
        """
        self.client_ssl_certificate_ids = client_ssl_certificate_ids
        self.client_ssl_settings = client_ssl_settings
        self.default_client_ssl_certificate_id = default_client_ssl_certificate_id
        self.insert_client_ip_header = insert_client_ip_header
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.access_log_enabled = access_log_enabled
        self.ip_address = ip_address
        self.lb_persistence_profile = lb_persistence_profile
        self.ports = ports
        self.router_path = router_path
        self.traffic_source = traffic_source
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

HttpsPolicyLbVirtualServer._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.https_policy_lb_virtual_server', {
        'client_ssl_certificate_ids': type.OptionalType(type.ListType(type.StringType())),
        'client_ssl_settings': type.OptionalType(type.StringType()),
        'default_client_ssl_certificate_id': type.OptionalType(type.StringType()),
        'insert_client_ip_header': type.OptionalType(type.BooleanType()),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'access_log_enabled': type.OptionalType(type.BooleanType()),
        'ip_address': type.OptionalType(type.StringType()),
        'lb_persistence_profile': type.OptionalType(type.StringType()),
        'ports': type.OptionalType(type.ListType(type.StringType())),
        'router_path': type.OptionalType(type.StringType()),
        'traffic_source': type.OptionalType(type.StringType()),
    },
    HttpsPolicyLbVirtualServer,
    False,
    None))



class ICMPTypeServiceEntry(VapiStruct):
    """
    A ServiceEntry that represents IPv4 or IPv6 ICMP protocol

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ICMPTypeServiceEntry"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    PROTOCOL_ICMPV4 = "ICMPv4"
    """


    """
    PROTOCOL_ICMPV6 = "ICMPv6"
    """


    """



    _canonical_to_pep_names = {
                            'icmp_code': 'icmp_code',
                            'icmp_type': 'icmp_type',
                            'protocol': 'protocol',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            }

    def __init__(self,
                 icmp_code=None,
                 icmp_type=None,
                 protocol=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ICMPTypeServiceEntry',
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                ):
        """
        :type  icmp_code: :class:`long` or ``None``
        :param icmp_code: ICMP message code format: int64
        :type  icmp_type: :class:`long` or ``None``
        :param icmp_type: ICMP message type format: int64
        :type  protocol: :class:`str` or ``None``
        :param protocol: Possible values are: 
            
            * :attr:`ICMPTypeServiceEntry.PROTOCOL_ICMPV4`
            * :attr:`ICMPTypeServiceEntry.PROTOCOL_ICMPV6`
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`ServiceEntry.RESOURCE_TYPE_IPPROTOCOLSERVICEENTRY`
            * :attr:`ServiceEntry.RESOURCE_TYPE_IGMPTYPESERVICEENTRY`
            * :attr:`ServiceEntry.RESOURCE_TYPE_ICMPTYPESERVICEENTRY`
            * :attr:`ServiceEntry.RESOURCE_TYPE_ALGTYPESERVICEENTRY`
            * :attr:`ServiceEntry.RESOURCE_TYPE_L4PORTSETSERVICEENTRY`
            * :attr:`ServiceEntry.RESOURCE_TYPE_ETHERTYPESERVICEENTRY`
            * :attr:`ServiceEntry.RESOURCE_TYPE_NESTEDSERVICESERVICEENTRY`
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.icmp_code = icmp_code
        self.icmp_type = icmp_type
        self.protocol = protocol
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ICMPTypeServiceEntry._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ICMP_type_service_entry', {
        'icmp_code': type.OptionalType(type.IntegerType()),
        'icmp_type': type.OptionalType(type.IntegerType()),
        'protocol': type.OptionalType(type.StringType()),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
    },
    ICMPTypeServiceEntry,
    False,
    None))



class IGMPTypeServiceEntry(VapiStruct):
    """
    A ServiceEntry that represents IGMP protocol

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "IGMPTypeServiceEntry"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='IGMPTypeServiceEntry',
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`ServiceEntry.RESOURCE_TYPE_IPPROTOCOLSERVICEENTRY`
            * :attr:`ServiceEntry.RESOURCE_TYPE_IGMPTYPESERVICEENTRY`
            * :attr:`ServiceEntry.RESOURCE_TYPE_ICMPTYPESERVICEENTRY`
            * :attr:`ServiceEntry.RESOURCE_TYPE_ALGTYPESERVICEENTRY`
            * :attr:`ServiceEntry.RESOURCE_TYPE_L4PORTSETSERVICEENTRY`
            * :attr:`ServiceEntry.RESOURCE_TYPE_ETHERTYPESERVICEENTRY`
            * :attr:`ServiceEntry.RESOURCE_TYPE_NESTEDSERVICESERVICEENTRY`
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

IGMPTypeServiceEntry._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.IGMP_type_service_entry', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
    },
    IGMPTypeServiceEntry,
    False,
    None))



class IPAddressExpression(VapiStruct):
    """
    Represents IP address expressions in the form of an array, to support
    addition of IP addresses in a group. Avoid creating groups with multiple
    IPAddressExpression. In future releases, group will be restricted to
    contain a single IPAddressExpression. To group IPAddresses, use nested
    groups instead of multiple IPAddressExpressions.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "IPAddressExpression"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'ip_addresses': 'ip_addresses',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            }

    def __init__(self,
                 ip_addresses=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='IPAddressExpression',
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                ):
        """
        :type  ip_addresses: :class:`list` of :class:`str` or ``None``
        :param ip_addresses: This array can consist of a single IP address, IP address range or
            a subnet. Its type can be of either IPv4 or IPv6. Both IPv4 and
            IPv6 addresses within one expression is not allowed. Supported list
            of formats are, \"192.168.1.1\", \"192.168.1.1-192.168.1.100\",
            \"192.168.0.0/24\", \"fe80::250:56ff:fe83:318c\",
            \"fe80::250:56ff:fe83:3181-fe80::250:56ff:fe83:318c\",
            \"fe80::250:56ff:fe83:318c/64\". format: address-or-block-or-range
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`Expression.RESOURCE_TYPE_CONDITION`
            * :attr:`Expression.RESOURCE_TYPE_CONJUNCTIONOPERATOR`
            * :attr:`Expression.RESOURCE_TYPE_NESTEDEXPRESSION`
            * :attr:`Expression.RESOURCE_TYPE_IPADDRESSEXPRESSION`
            * :attr:`Expression.RESOURCE_TYPE_MACADDRESSEXPRESSION`
            * :attr:`Expression.RESOURCE_TYPE_EXTERNALIDEXPRESSION`
            * :attr:`Expression.RESOURCE_TYPE_PATHEXPRESSION`
            * :attr:`Expression.RESOURCE_TYPE_IDENTITYGROUPEXPRESSION`
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.ip_addresses = ip_addresses
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

IPAddressExpression._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.IP_address_expression', {
        'ip_addresses': type.OptionalType(type.ListType(type.StringType())),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
    },
    IPAddressExpression,
    False,
    None))



class IPAddressList(VapiStruct):
    """
    Collection of IP Addresses.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'ip_addresses': 'ip_addresses',
                            }

    def __init__(self,
                 ip_addresses=None,
                ):
        """
        :type  ip_addresses: :class:`list` of :class:`str` or ``None``
        :param ip_addresses: The array contains IP addresses. format: address-or-block-or-range
        """
        self.ip_addresses = ip_addresses
        VapiStruct.__init__(self)


IPAddressList._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.IP_address_list', {
        'ip_addresses': type.OptionalType(type.ListType(type.StringType())),
    },
    IPAddressList,
    False,
    None))



class IPAddressPortPair(VapiStruct):
    """
    IP Address and Port information

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'ip_address': 'ip_address',
                            'port': 'port',
                            }

    def __init__(self,
                 ip_address=None,
                 port=None,
                ):
        """
        :type  ip_address: :class:`str` or ``None``
        :param ip_address: The IPAddress to be combined with Port for defining specific access
            point. format: ip
        :type  port: :class:`long` or ``None``
        :param port: The port to be combined with IPAddress for defining a specific
            access point. format: int32
        """
        self.ip_address = ip_address
        self.port = port
        VapiStruct.__init__(self)


IPAddressPortPair._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.IP_address_port_pair', {
        'ip_address': type.OptionalType(type.StringType()),
        'port': type.OptionalType(type.IntegerType()),
    },
    IPAddressPortPair,
    False,
    None))



class IPDiscoveryProfile(VapiStruct):
    """
    Using this profile to configure different options of IP Discovery

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'arp_nd_binding_timeout': 'arp_nd_binding_timeout',
                            'duplicate_ip_detection': 'duplicate_ip_detection',
                            'ip_v4_discovery_options': 'ip_v4_discovery_options',
                            'ip_v6_discovery_options': 'ip_v6_discovery_options',
                            'tofu_enabled': 'tofu_enabled',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 arp_nd_binding_timeout=None,
                 duplicate_ip_detection=None,
                 ip_v4_discovery_options=None,
                 ip_v6_discovery_options=None,
                 tofu_enabled=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  arp_nd_binding_timeout: :class:`long` or ``None``
        :param arp_nd_binding_timeout: This property controls the ARP and ND cache timeout period. It is
            recommended that this property be greater than the ARP/ND cache
            timeout on the VM. format: int32
        :type  duplicate_ip_detection: :class:`DuplicateIPDetectionOptions` or ``None``
        :param duplicate_ip_detection: Duplicate IP detection is used to determine if there is any IP
            conflict with any other port on the same logical switch. If a
            conflict is detected, then the IP is marked as a duplicate on the
            port where the IP was discovered last. The duplicate IP will not be
            added to the realized address binings for the port and hence will
            not be used in DFW rules or other security configurations for the
            port.rt.
        :type  ip_v4_discovery_options: :class:`IPv4DiscoveryOptions` or ``None``
        :param ip_v4_discovery_options: Indicates IPv4 Discovery options
        :type  ip_v6_discovery_options: :class:`IPv6DiscoveryOptions` or ``None``
        :param ip_v6_discovery_options: Indicates IPv6 Discovery options
        :type  tofu_enabled: :class:`bool` or ``None``
        :param tofu_enabled: Indicates whether \"Trust on First Use(TOFU)\" paradigm is enabled.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.arp_nd_binding_timeout = arp_nd_binding_timeout
        self.duplicate_ip_detection = duplicate_ip_detection
        self.ip_v4_discovery_options = ip_v4_discovery_options
        self.ip_v6_discovery_options = ip_v6_discovery_options
        self.tofu_enabled = tofu_enabled
        VapiStruct.__init__(self)


IPDiscoveryProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.IP_discovery_profile', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'arp_nd_binding_timeout': type.OptionalType(type.IntegerType()),
        'duplicate_ip_detection': type.OptionalType(type.ReferenceType(__name__, 'DuplicateIPDetectionOptions')),
        'ip_v4_discovery_options': type.OptionalType(type.ReferenceType(__name__, 'IPv4DiscoveryOptions')),
        'ip_v6_discovery_options': type.OptionalType(type.ReferenceType(__name__, 'IPv6DiscoveryOptions')),
        'tofu_enabled': type.OptionalType(type.BooleanType()),
    },
    IPDiscoveryProfile,
    False,
    None))



class IPDiscoveryProfileListResult(VapiStruct):
    """
    Paged collection of IP Discovery Profiles

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`IPDiscoveryProfile` or ``None``
        :param results: IP Discovery profile list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


IPDiscoveryProfileListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.IP_discovery_profile_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'IPDiscoveryProfile'))),
    },
    IPDiscoveryProfileListResult,
    False,
    None))



class IPFIXCollectorProfile(VapiStruct):
    """
    IPFIX data will be collected on collector Host ip and port address should
    be provided for collector.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'ipaddress': 'ipaddress',
                            'port': 'port',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 ipaddress=None,
                 port=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  ipaddress: :class:`str` or ``None``
        :param ipaddress: IP address for the IPFIX collector. format: ip
        :type  port: :class:`long` or ``None``
        :param port: Port for the IPFIX collector. format: int32
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.ipaddress = ipaddress
        self.port = port
        VapiStruct.__init__(self)


IPFIXCollectorProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.IPFIX_collector_profile', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'ipaddress': type.OptionalType(type.StringType()),
        'port': type.OptionalType(type.IntegerType()),
    },
    IPFIXCollectorProfile,
    False,
    None))



class IPFIXCollectorProfileListResult(VapiStruct):
    """
    Paged collection of IPFIX collector profiles.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`IPFIXCollectorProfile` or ``None``
        :param results: IPFIX collector Instances list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


IPFIXCollectorProfileListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.IPFIX_collector_profile_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'IPFIXCollectorProfile'))),
    },
    IPFIXCollectorProfileListResult,
    False,
    None))



class IPFIXDFWCollector(VapiStruct):
    """
    IPFIX DFW data will be collected on collector Host IP and Port address
    should be provided for collector.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'collector_ip_address': 'collector_ip_address',
                            'collector_port': 'collector_port',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 collector_ip_address=None,
                 collector_port=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  collector_ip_address: :class:`str` or ``None``
        :param collector_ip_address: IP address for the IPFIX DFW collector. IP addresses such as
            0.0.0.0, 127.0.0.1, 255.255.255.255 are invalid. format: ip
        :type  collector_port: :class:`long` or ``None``
        :param collector_port: Port for the IPFIX DFW collector. format: int32
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.collector_ip_address = collector_ip_address
        self.collector_port = collector_port
        VapiStruct.__init__(self)


IPFIXDFWCollector._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.IPFIXDFW_collector', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'collector_ip_address': type.OptionalType(type.StringType()),
        'collector_port': type.OptionalType(type.IntegerType()),
    },
    IPFIXDFWCollector,
    False,
    None))



class IPFIXDFWCollectorProfile(VapiStruct):
    """
    IPFIX data for the NSX distributed firewall will be sent to the specified
    IPFIX collectors.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'ipfix_dfw_collectors': 'ipfix_dfw_collectors',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 ipfix_dfw_collectors=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  ipfix_dfw_collectors: :class:`list` of :class:`IPFIXDFWCollector` or ``None``
        :param ipfix_dfw_collectors: It accepts Multiple Collectors.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.ipfix_dfw_collectors = ipfix_dfw_collectors
        VapiStruct.__init__(self)


IPFIXDFWCollectorProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.IPFIXDFW_collector_profile', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'ipfix_dfw_collectors': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'IPFIXDFWCollector'))),
    },
    IPFIXDFWCollectorProfile,
    False,
    None))



class IPFIXDFWCollectorProfileListResult(VapiStruct):
    """
    Paged Collection of IPFIX DFW Collector Profile

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`IPFIXDFWCollectorProfile` or ``None``
        :param results: IPFIX DFW Collection Instances list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


IPFIXDFWCollectorProfileListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.IPFIXDFW_collector_profile_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'IPFIXDFWCollectorProfile'))),
    },
    IPFIXDFWCollectorProfileListResult,
    False,
    None))



class IPFIXDFWProfile(VapiStruct):
    """
    IPFIX packets from source will be sent to IPFIX DFW collector.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'active_flow_export_timeout': 'active_flow_export_timeout',
                            'ipfix_dfw_collector_profile_path': 'ipfix_dfw_collector_profile_path',
                            'observation_domain_id': 'observation_domain_id',
                            'priority': 'priority',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 active_flow_export_timeout=None,
                 ipfix_dfw_collector_profile_path=None,
                 observation_domain_id=None,
                 priority=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  active_flow_export_timeout: :class:`long` or ``None``
        :param active_flow_export_timeout: For long standing active flows, IPFIX records will be sent per
            timeout period in minutes. format: int32
        :type  ipfix_dfw_collector_profile_path: :class:`str` or ``None``
        :param ipfix_dfw_collector_profile_path: Policy path for IPFIX collector profiles. IPFIX data from these
            logical segments will be sent to all specified IPFIX collectors.
        :type  observation_domain_id: :class:`long` or ``None``
        :param observation_domain_id: An identifier that is unique to the exporting process and used to
            meter the flows. format: int32
        :type  priority: :class:`long` or ``None``
        :param priority: This priority field is used to resolve conflicts in Segment Ports
            which are covered by more than one IPFIX profiles. The IPFIX
            exporter will send records to Collectors in highest priority
            profile (lowest number) only. format: int32
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.active_flow_export_timeout = active_flow_export_timeout
        self.ipfix_dfw_collector_profile_path = ipfix_dfw_collector_profile_path
        self.observation_domain_id = observation_domain_id
        self.priority = priority
        VapiStruct.__init__(self)


IPFIXDFWProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.IPFIXDFW_profile', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'active_flow_export_timeout': type.OptionalType(type.IntegerType()),
        'ipfix_dfw_collector_profile_path': type.OptionalType(type.StringType()),
        'observation_domain_id': type.OptionalType(type.IntegerType()),
        'priority': type.OptionalType(type.IntegerType()),
    },
    IPFIXDFWProfile,
    False,
    None))



class IPFIXDFWProfileListResult(VapiStruct):
    """
    Paged Collection of IPFIX DFW Profile

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`IPFIXDFWProfile` or ``None``
        :param results: IPFIX DFW Profile list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


IPFIXDFWProfileListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.IPFIXDFW_profile_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'IPFIXDFWProfile'))),
    },
    IPFIXDFWProfileListResult,
    False,
    None))



class IPFIXL2Collector(VapiStruct):
    """
    IPFIX packets will be collected on collector. IP and port address should be
    provided for collector.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'collector_ip_address': 'collector_ip_address',
                            'collector_port': 'collector_port',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 collector_ip_address=None,
                 collector_port=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  collector_ip_address: :class:`str` or ``None``
        :param collector_ip_address: IP address for the IPFIX L2 collector. IP addresses such as
            0.0.0.0, 127.0.0.1, 255.255.255.255 are invalid. format: ip
        :type  collector_port: :class:`long` or ``None``
        :param collector_port: Port number for the IPFIX L2 collector. format: int32
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.collector_ip_address = collector_ip_address
        self.collector_port = collector_port
        VapiStruct.__init__(self)


IPFIXL2Collector._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.IPFIX_l2_collector', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'collector_ip_address': type.OptionalType(type.StringType()),
        'collector_port': type.OptionalType(type.IntegerType()),
    },
    IPFIXL2Collector,
    False,
    None))



class IPFIXL2CollectorProfile(VapiStruct):
    """
    IPFIX L2 data will be collected on collectors.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'ipfix_l2_collectors': 'ipfix_l2_collectors',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 ipfix_l2_collectors=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  ipfix_l2_collectors: :class:`list` of :class:`IPFIXL2Collector` or ``None``
        :param ipfix_l2_collectors: It accepts Multiple Collector objects.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.ipfix_l2_collectors = ipfix_l2_collectors
        VapiStruct.__init__(self)


IPFIXL2CollectorProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.IPFIX_l2_collector_profile', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'ipfix_l2_collectors': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'IPFIXL2Collector'))),
    },
    IPFIXL2CollectorProfile,
    False,
    None))



class IPFIXL2CollectorProfileListResult(VapiStruct):
    """
    Paged list of IPFIX collector profiles.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`IPFIXL2CollectorProfile` or ``None``
        :param results: IPFIX collector Profile list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


IPFIXL2CollectorProfileListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.IPFIX_l2_collector_profile_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'IPFIXL2CollectorProfile'))),
    },
    IPFIXL2CollectorProfileListResult,
    False,
    None))



class IPFIXL2Profile(VapiStruct):
    """
    IPFIX data from source logical segment, port, group will be forwarded to
    IPFIX collector.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'active_timeout': 'active_timeout',
                            'export_overlay_flow': 'export_overlay_flow',
                            'idle_timeout': 'idle_timeout',
                            'ipfix_collector_profile_path': 'ipfix_collector_profile_path',
                            'max_flows': 'max_flows',
                            'observation_domain_id': 'observation_domain_id',
                            'packet_sample_probability': 'packet_sample_probability',
                            'priority': 'priority',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 active_timeout=None,
                 export_overlay_flow=None,
                 idle_timeout=None,
                 ipfix_collector_profile_path=None,
                 max_flows=None,
                 observation_domain_id=None,
                 packet_sample_probability=None,
                 priority=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  active_timeout: :class:`long` or ``None``
        :param active_timeout: The time in seconds after a flow is expired even if more packets
            matching this flow are received by the cache. format: int32
        :type  export_overlay_flow: :class:`bool` or ``None``
        :param export_overlay_flow: This property controls whether overlay flow info is included in the
            sample result.
        :type  idle_timeout: :class:`long` or ``None``
        :param idle_timeout: The time in seconds after a flow is expired if no more packets
            matching this flow are received by the cache. format: int32
        :type  ipfix_collector_profile_path: :class:`str` or ``None``
        :param ipfix_collector_profile_path: Policy path for IPFIX collector profile. User can specify only one
            IPFIX collector.
        :type  max_flows: :class:`long` or ``None``
        :param max_flows: The maximum number of flow entries in each exporter flow cache.
            format: int64
        :type  observation_domain_id: :class:`long` or ``None``
        :param observation_domain_id: An identifier that is unique to the exporting process and used to
            meter the flows. format: int64
        :type  packet_sample_probability: :class:`float` or ``None``
        :param packet_sample_probability: The probability in percentage that a packet is sampled, in range
            0-100. The probability is equal for every packet.
        :type  priority: :class:`long` or ``None``
        :param priority: This priority field is used to resolve conflicts in Segment Ports
            which are covered by more than one IPFIX profiles. The IPFIX
            exporter will send records to Collectors in highest priority
            profile (lowest number) only. format: int32
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.active_timeout = active_timeout
        self.export_overlay_flow = export_overlay_flow
        self.idle_timeout = idle_timeout
        self.ipfix_collector_profile_path = ipfix_collector_profile_path
        self.max_flows = max_flows
        self.observation_domain_id = observation_domain_id
        self.packet_sample_probability = packet_sample_probability
        self.priority = priority
        VapiStruct.__init__(self)


IPFIXL2Profile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.IPFIX_l2_profile', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'active_timeout': type.OptionalType(type.IntegerType()),
        'export_overlay_flow': type.OptionalType(type.BooleanType()),
        'idle_timeout': type.OptionalType(type.IntegerType()),
        'ipfix_collector_profile_path': type.OptionalType(type.StringType()),
        'max_flows': type.OptionalType(type.IntegerType()),
        'observation_domain_id': type.OptionalType(type.IntegerType()),
        'packet_sample_probability': type.OptionalType(type.DoubleType()),
        'priority': type.OptionalType(type.IntegerType()),
    },
    IPFIXL2Profile,
    False,
    None))



class IPFIXL2ProfileListResult(VapiStruct):
    """
    Paged Collection of IPFIX L2 Profile

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`IPFIXL2Profile` or ``None``
        :param results: IPFIX L2 Profile list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


IPFIXL2ProfileListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.IPFIX_l2_profile_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'IPFIXL2Profile'))),
    },
    IPFIXL2ProfileListResult,
    False,
    None))



class IPFIXSwitchCollectionInstance(VapiStruct):
    """
    IPFIX data from source logical segment will be copied to IPFIX collector.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'active_timeout': 'active_timeout',
                            'idle_timeout': 'idle_timeout',
                            'ipfix_collector_profile_paths': 'ipfix_collector_profile_paths',
                            'max_flows': 'max_flows',
                            'observation_domain_id': 'observation_domain_id',
                            'packet_sample_probability': 'packet_sample_probability',
                            'source_logical_segment_paths': 'source_logical_segment_paths',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 active_timeout=None,
                 idle_timeout=None,
                 ipfix_collector_profile_paths=None,
                 max_flows=None,
                 observation_domain_id=None,
                 packet_sample_probability=None,
                 source_logical_segment_paths=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  active_timeout: :class:`long` or ``None``
        :param active_timeout: The time in seconds after a flow is expired even if more packets
            matching this flow are received by the cache. format: int32
        :type  idle_timeout: :class:`long` or ``None``
        :param idle_timeout: The time in seconds after a Flow is expired if no more packets
            matching this Flow are received by the cache. format: int32
        :type  ipfix_collector_profile_paths: :class:`list` of :class:`str` or ``None``
        :param ipfix_collector_profile_paths: Policy path for IPFIX collector profiles. IPFIX data from these
            logical segments will be sent to all specified IPFIX collectors.
        :type  max_flows: :class:`long` or ``None``
        :param max_flows: The maximum number of flow entries in each exporter flow cache.
            format: int64
        :type  observation_domain_id: :class:`long` or ``None``
        :param observation_domain_id: An identifier that is unique to the exporting process and used to
            meter the Flows. format: int32
        :type  packet_sample_probability: :class:`float` or ``None``
        :param packet_sample_probability: The probability in percentage that a packet is sampled, in range
            0-100. The probability is equal for every packet.
        :type  source_logical_segment_paths: :class:`list` of :class:`str` or ``None``
        :param source_logical_segment_paths: Policy path for source tier-1 segment. IPFIX data from these
            logical segments will be sent IPFIX collector.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.active_timeout = active_timeout
        self.idle_timeout = idle_timeout
        self.ipfix_collector_profile_paths = ipfix_collector_profile_paths
        self.max_flows = max_flows
        self.observation_domain_id = observation_domain_id
        self.packet_sample_probability = packet_sample_probability
        self.source_logical_segment_paths = source_logical_segment_paths
        VapiStruct.__init__(self)


IPFIXSwitchCollectionInstance._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.IPFIX_switch_collection_instance', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'active_timeout': type.OptionalType(type.IntegerType()),
        'idle_timeout': type.OptionalType(type.IntegerType()),
        'ipfix_collector_profile_paths': type.OptionalType(type.ListType(type.StringType())),
        'max_flows': type.OptionalType(type.IntegerType()),
        'observation_domain_id': type.OptionalType(type.IntegerType()),
        'packet_sample_probability': type.OptionalType(type.DoubleType()),
        'source_logical_segment_paths': type.OptionalType(type.ListType(type.StringType())),
    },
    IPFIXSwitchCollectionInstance,
    False,
    None))



class IPFIXSwitchCollectionInstanceListResult(VapiStruct):
    """
    Paged Collection of IPFIX Switch Collection Instances

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`IPFIXSwitchCollectionInstance` or ``None``
        :param results: IPFIX Switch Collection Instances list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


IPFIXSwitchCollectionInstanceListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.IPFIX_switch_collection_instance_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'IPFIXSwitchCollectionInstance'))),
    },
    IPFIXSwitchCollectionInstanceListResult,
    False,
    None))



class IPInfo(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'ip_addresses': 'ip_addresses',
                            'prefix_length': 'prefix_length',
                            }

    def __init__(self,
                 ip_addresses=None,
                 prefix_length=None,
                ):
        """
        :type  ip_addresses: :class:`list` of :class:`str` or ``None``
        :param ip_addresses: IPv4 Addresses format: ipv4
        :type  prefix_length: :class:`long` or ``None``
        :param prefix_length: Subnet Prefix Length format: int64
        """
        self.ip_addresses = ip_addresses
        self.prefix_length = prefix_length
        VapiStruct.__init__(self)


IPInfo._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.IP_info', {
        'ip_addresses': type.OptionalType(type.ListType(type.StringType())),
        'prefix_length': type.OptionalType(type.IntegerType()),
    },
    IPInfo,
    False,
    None))



class IPProtocolServiceEntry(VapiStruct):
    """
    A ServiceEntry that represents an IP protocol

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "IPProtocolServiceEntry"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'protocol_number': 'protocol_number',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            }

    def __init__(self,
                 protocol_number=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='IPProtocolServiceEntry',
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                ):
        """
        :type  protocol_number: :class:`long` or ``None``
        :param protocol_number: 
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`ServiceEntry.RESOURCE_TYPE_IPPROTOCOLSERVICEENTRY`
            * :attr:`ServiceEntry.RESOURCE_TYPE_IGMPTYPESERVICEENTRY`
            * :attr:`ServiceEntry.RESOURCE_TYPE_ICMPTYPESERVICEENTRY`
            * :attr:`ServiceEntry.RESOURCE_TYPE_ALGTYPESERVICEENTRY`
            * :attr:`ServiceEntry.RESOURCE_TYPE_L4PORTSETSERVICEENTRY`
            * :attr:`ServiceEntry.RESOURCE_TYPE_ETHERTYPESERVICEENTRY`
            * :attr:`ServiceEntry.RESOURCE_TYPE_NESTEDSERVICESERVICEENTRY`
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.protocol_number = protocol_number
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

IPProtocolServiceEntry._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.IP_protocol_service_entry', {
        'protocol_number': type.OptionalType(type.IntegerType()),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
    },
    IPProtocolServiceEntry,
    False,
    None))



class IPSecVpnDpdProfile(VapiStruct):
    """
    Dead peer detection (DPD) is a method that allows detection of unreachable
    internet key excahnge (IKE) peers. Any changes affects all IPSec VPN
    sessions consuming this profile.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    DPD_PROBE_MODE_PERIODIC = "PERIODIC"
    """


    """
    DPD_PROBE_MODE_ON_DEMAND = "ON_DEMAND"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'dpd_probe_interval': 'dpd_probe_interval',
                            'dpd_probe_mode': 'dpd_probe_mode',
                            'enabled': 'enabled',
                            'retry_count': 'retry_count',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 dpd_probe_interval=None,
                 dpd_probe_mode=None,
                 enabled=None,
                 retry_count=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  dpd_probe_interval: :class:`long` or ``None``
        :param dpd_probe_interval: DPD probe interval defines an interval for DPD probes (in seconds).
            - When the DPD probe mode is periodic, this interval is the number
            of seconds between DPD messages. - When the DPD probe mode is
            on-demand, this interval is the number of seconds during which
            traffic is not received from the peer before DPD retry messages are
            sent if there is IPSec traffic to send. For PERIODIC Mode: Minimum:
            3 Maximum: 360 Default: 60 For ON_DEMAND Mode: Minimum: 1 Maximum:
            10 Default: 3 format: int64
        :type  dpd_probe_mode: :class:`str` or ``None``
        :param dpd_probe_mode: Possible values are: 
            
            * :attr:`IPSecVpnDpdProfile.DPD_PROBE_MODE_PERIODIC`
            * :attr:`IPSecVpnDpdProfile.DPD_PROBE_MODE_ON_DEMAND`
            
            DPD probe mode is used to query the liveliness of the peer. Two
            modes are possible: - PERIODIC: is used to query the liveliness of
            the peer at regular intervals (dpd_probe_interval). It does not
            take into consideration traffic coming from the peer. The benefit
            of this mode over the on-demand mode is earlier detection of dead
            peers. However, use of periodic DPD incurs extra overhead. When
            communicating to large numbers of peers, please consider using
            on-demand DPD instead. - ON_DEMAND: is used to query the liveliness
            of the peer by instructing the local endpoint to send DPD message
            to a peer if there is traffic to send to the peer AND the peer was
            idle for dpd_probe_interval seconds (i.e. there was no traffic from
            the peer for dpd_probe_interval seconds).
        :type  enabled: :class:`bool` or ``None``
        :param enabled: If true, enable dead peer detection.
        :type  retry_count: :class:`long` or ``None``
        :param retry_count: Maximum number of DPD messages' retry attempts. This value is
            applicable for both dpd probe modes, periodic and on-demand.
            format: int64
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.dpd_probe_interval = dpd_probe_interval
        self.dpd_probe_mode = dpd_probe_mode
        self.enabled = enabled
        self.retry_count = retry_count
        VapiStruct.__init__(self)


IPSecVpnDpdProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.IP_sec_vpn_dpd_profile', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'dpd_probe_interval': type.OptionalType(type.IntegerType()),
        'dpd_probe_mode': type.OptionalType(type.StringType()),
        'enabled': type.OptionalType(type.BooleanType()),
        'retry_count': type.OptionalType(type.IntegerType()),
    },
    IPSecVpnDpdProfile,
    False,
    None))



class IPSecVpnDpdProfileListResult(VapiStruct):
    """
    Paged Collection of IPSecVpnDpdProfile.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`IPSecVpnDpdProfile` or ``None``
        :param results: IPSecVpnDpdProfile list results.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


IPSecVpnDpdProfileListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.IP_sec_vpn_dpd_profile_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'IPSecVpnDpdProfile'))),
    },
    IPSecVpnDpdProfileListResult,
    False,
    None))



class IPSecVpnIkeProfile(VapiStruct):
    """
    IKE Profile is a reusable profile that captures IKE phase one negotiation
    parameters. Any changes affects all IPSec VPN sessions consuming this
    profile.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    DH_GROUPS_GROUP2 = "GROUP2"
    """


    """
    DH_GROUPS_GROUP5 = "GROUP5"
    """


    """
    DH_GROUPS_GROUP14 = "GROUP14"
    """


    """
    DH_GROUPS_GROUP15 = "GROUP15"
    """


    """
    DH_GROUPS_GROUP16 = "GROUP16"
    """


    """
    DH_GROUPS_GROUP19 = "GROUP19"
    """


    """
    DH_GROUPS_GROUP20 = "GROUP20"
    """


    """
    DH_GROUPS_GROUP21 = "GROUP21"
    """


    """
    DIGEST_ALGORITHMS_SHA1 = "SHA1"
    """


    """
    DIGEST_ALGORITHMS_SHA2_256 = "SHA2_256"
    """


    """
    DIGEST_ALGORITHMS_SHA2_384 = "SHA2_384"
    """


    """
    DIGEST_ALGORITHMS_SHA2_512 = "SHA2_512"
    """


    """
    ENCRYPTION_ALGORITHMS_128 = "AES_128"
    """


    """
    ENCRYPTION_ALGORITHMS_256 = "AES_256"
    """


    """
    ENCRYPTION_ALGORITHMS_GCM_128 = "AES_GCM_128"
    """


    """
    ENCRYPTION_ALGORITHMS_GCM_192 = "AES_GCM_192"
    """


    """
    ENCRYPTION_ALGORITHMS_GCM_256 = "AES_GCM_256"
    """


    """
    IKE_VERSION_V1 = "IKE_V1"
    """


    """
    IKE_VERSION_V2 = "IKE_V2"
    """


    """
    IKE_VERSION_FLEX = "IKE_FLEX"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'dh_groups': 'dh_groups',
                            'digest_algorithms': 'digest_algorithms',
                            'encryption_algorithms': 'encryption_algorithms',
                            'ike_version': 'ike_version',
                            'sa_life_time': 'sa_life_time',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 dh_groups=None,
                 digest_algorithms=None,
                 encryption_algorithms=None,
                 ike_version=None,
                 sa_life_time=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  dh_groups: :class:`list` of :class:`str` or ``None``
        :param dh_groups: Possible values are: 
            
            * :attr:`IPSecVpnIkeProfile.DH_GROUPS_GROUP2`
            * :attr:`IPSecVpnIkeProfile.DH_GROUPS_GROUP5`
            * :attr:`IPSecVpnIkeProfile.DH_GROUPS_GROUP14`
            * :attr:`IPSecVpnIkeProfile.DH_GROUPS_GROUP15`
            * :attr:`IPSecVpnIkeProfile.DH_GROUPS_GROUP16`
            * :attr:`IPSecVpnIkeProfile.DH_GROUPS_GROUP19`
            * :attr:`IPSecVpnIkeProfile.DH_GROUPS_GROUP20`
            * :attr:`IPSecVpnIkeProfile.DH_GROUPS_GROUP21`
            
            Diffie-Hellman group to be used if PFS is enabled. Default is
            GROUP14.
        :type  digest_algorithms: :class:`list` of :class:`str` or ``None``
        :param digest_algorithms: Possible values are: 
            
            * :attr:`IPSecVpnIkeProfile.DIGEST_ALGORITHMS_SHA1`
            * :attr:`IPSecVpnIkeProfile.DIGEST_ALGORITHMS_SHA2_256`
            * :attr:`IPSecVpnIkeProfile.DIGEST_ALGORITHMS_SHA2_384`
            * :attr:`IPSecVpnIkeProfile.DIGEST_ALGORITHMS_SHA2_512`
            
            Algorithm to be used for message digest during Internet Key
            Exchange(IKE) negotiation. Default is SHA2_256.
        :type  encryption_algorithms: :class:`list` of :class:`str` or ``None``
        :param encryption_algorithms: Possible values are: 
            
            * :attr:`IPSecVpnIkeProfile.ENCRYPTION_ALGORITHMS__128`
            * :attr:`IPSecVpnIkeProfile.ENCRYPTION_ALGORITHMS__256`
            * :attr:`IPSecVpnIkeProfile.ENCRYPTION_ALGORITHMS_GCM_128`
            * :attr:`IPSecVpnIkeProfile.ENCRYPTION_ALGORITHMS_GCM_192`
            * :attr:`IPSecVpnIkeProfile.ENCRYPTION_ALGORITHMS_GCM_256`
            
            Encryption algorithm is used during Internet Key Exchange(IKE)
            negotiation. Default is AES_128.
        :type  ike_version: :class:`str` or ``None``
        :param ike_version: Possible values are: 
            
            * :attr:`IPSecVpnIkeProfile.IKE_VERSION_V1`
            * :attr:`IPSecVpnIkeProfile.IKE_VERSION_V2`
            * :attr:`IPSecVpnIkeProfile.IKE_VERSION_FLEX`
            
            IKE protocol version to be used. IKE-Flex will initiate IKE-V2 and
            responds to both IKE-V1 and IKE-V2.
        :type  sa_life_time: :class:`long` or ``None``
        :param sa_life_time: Life time for security association. Default is 86400 seconds (1
            day). format: int64
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.dh_groups = dh_groups
        self.digest_algorithms = digest_algorithms
        self.encryption_algorithms = encryption_algorithms
        self.ike_version = ike_version
        self.sa_life_time = sa_life_time
        VapiStruct.__init__(self)


IPSecVpnIkeProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.IP_sec_vpn_ike_profile', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'dh_groups': type.OptionalType(type.ListType(type.StringType())),
        'digest_algorithms': type.OptionalType(type.ListType(type.StringType())),
        'encryption_algorithms': type.OptionalType(type.ListType(type.StringType())),
        'ike_version': type.OptionalType(type.StringType()),
        'sa_life_time': type.OptionalType(type.IntegerType()),
    },
    IPSecVpnIkeProfile,
    False,
    None))



class IPSecVpnIkeProfileListResult(VapiStruct):
    """
    Paged Collection of IPSecVpnIkeProfile.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`IPSecVpnIkeProfile` or ``None``
        :param results: IPSecVpnIkeProfile list results.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


IPSecVpnIkeProfileListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.IP_sec_vpn_ike_profile_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'IPSecVpnIkeProfile'))),
    },
    IPSecVpnIkeProfileListResult,
    False,
    None))



class IPSecVpnIkeSessionStatus(VapiStruct):
    """
    Status for IPSec VPN Ike session UP, DOWN, NEGOTIATING and fail reason if
    Ike session is down.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    IKE_SESSION_STATE_UP = "UP"
    """


    """
    IKE_SESSION_STATE_DOWN = "DOWN"
    """


    """
    IKE_SESSION_STATE_NEGOTIATING = "NEGOTIATING"
    """


    """



    _canonical_to_pep_names = {
                            'fail_reason': 'fail_reason',
                            'ike_session_state': 'ike_session_state',
                            }

    def __init__(self,
                 fail_reason=None,
                 ike_session_state=None,
                ):
        """
        :type  fail_reason: :class:`str` or ``None``
        :param fail_reason: Reason for failure.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  ike_session_state: :class:`str` or ``None``
        :param ike_session_state: Possible values are: 
            
            * :attr:`IPSecVpnIkeSessionStatus.IKE_SESSION_STATE_UP`
            * :attr:`IPSecVpnIkeSessionStatus.IKE_SESSION_STATE_DOWN`
            * :attr:`IPSecVpnIkeSessionStatus.IKE_SESSION_STATE_NEGOTIATING`
            
             Ike session service status UP, DOWN and NEGOTIATING.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.fail_reason = fail_reason
        self.ike_session_state = ike_session_state
        VapiStruct.__init__(self)


IPSecVpnIkeSessionStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.IP_sec_vpn_ike_session_status', {
        'fail_reason': type.OptionalType(type.StringType()),
        'ike_session_state': type.OptionalType(type.StringType()),
    },
    IPSecVpnIkeSessionStatus,
    False,
    None))



class IPSecVpnIkeTrafficStatistics(VapiStruct):
    """
    Traffic statistics for IPSec VPN Ike session. Note - Not supported in this
    release.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'bytes_in': 'bytes_in',
                            'bytes_out': 'bytes_out',
                            'fail_count': 'fail_count',
                            'packets_in': 'packets_in',
                            'packets_out': 'packets_out',
                            }

    def __init__(self,
                 bytes_in=None,
                 bytes_out=None,
                 fail_count=None,
                 packets_in=None,
                 packets_out=None,
                ):
        """
        :type  bytes_in: :class:`long` or ``None``
        :param bytes_in: Number of bytes in. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  bytes_out: :class:`long` or ``None``
        :param bytes_out: Number of bytes out. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  fail_count: :class:`long` or ``None``
        :param fail_count: Fail count. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  packets_in: :class:`long` or ``None``
        :param packets_in: Number of packets in. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  packets_out: :class:`long` or ``None``
        :param packets_out: Number of packets out. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.bytes_in = bytes_in
        self.bytes_out = bytes_out
        self.fail_count = fail_count
        self.packets_in = packets_in
        self.packets_out = packets_out
        VapiStruct.__init__(self)


IPSecVpnIkeTrafficStatistics._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.IP_sec_vpn_ike_traffic_statistics', {
        'bytes_in': type.OptionalType(type.IntegerType()),
        'bytes_out': type.OptionalType(type.IntegerType()),
        'fail_count': type.OptionalType(type.IntegerType()),
        'packets_in': type.OptionalType(type.IntegerType()),
        'packets_out': type.OptionalType(type.IntegerType()),
    },
    IPSecVpnIkeTrafficStatistics,
    False,
    None))



class IPSecVpnLocalEndpoint(VapiStruct):
    """
    Local endpoint represents a tier-0/tier-1 on which tunnel needs to be
    terminated.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'certificate_path': 'certificate_path',
                            'local_address': 'local_address',
                            'local_id': 'local_id',
                            'trust_ca_paths': 'trust_ca_paths',
                            'trust_crl_paths': 'trust_crl_paths',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 certificate_path=None,
                 local_address=None,
                 local_id=None,
                 trust_ca_paths=None,
                 trust_crl_paths=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  certificate_path: :class:`str` or ``None``
        :param certificate_path: Policy path referencing site certificate.
        :type  local_address: :class:`str` or ``None``
        :param local_address: IPV4 Address of local endpoint. format: ipv4
        :type  local_id: :class:`str` or ``None``
        :param local_id: Local identifier.
        :type  trust_ca_paths: :class:`list` of :class:`str` or ``None``
        :param trust_ca_paths: List of policy paths referencing certificate authority (CA) to
            verify peer certificates.
        :type  trust_crl_paths: :class:`list` of :class:`str` or ``None``
        :param trust_crl_paths: List of policy paths referencing certificate revocation list (CRL)
            to peer certificates.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.certificate_path = certificate_path
        self.local_address = local_address
        self.local_id = local_id
        self.trust_ca_paths = trust_ca_paths
        self.trust_crl_paths = trust_crl_paths
        VapiStruct.__init__(self)


IPSecVpnLocalEndpoint._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.IP_sec_vpn_local_endpoint', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'certificate_path': type.OptionalType(type.StringType()),
        'local_address': type.OptionalType(type.StringType()),
        'local_id': type.OptionalType(type.StringType()),
        'trust_ca_paths': type.OptionalType(type.ListType(type.StringType())),
        'trust_crl_paths': type.OptionalType(type.ListType(type.StringType())),
    },
    IPSecVpnLocalEndpoint,
    False,
    None))



class IPSecVpnLocalEndpointListResult(VapiStruct):
    """
    Paged Collection of IPSecVpnLocalEndpoint.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`IPSecVpnLocalEndpoint` or ``None``
        :param results: IPSecVpnLocalEndpoint list results.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


IPSecVpnLocalEndpointListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.IP_sec_vpn_local_endpoint_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'IPSecVpnLocalEndpoint'))),
    },
    IPSecVpnLocalEndpointListResult,
    False,
    None))



class IPSecVpnPolicyTrafficStatistics(VapiStruct):
    """
    IPSec VPN policy traffic statistics.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'aggregate_traffic_counters': 'aggregate_traffic_counters',
                            'rule_path': 'rule_path',
                            'tunnel_statistics': 'tunnel_statistics',
                            }

    def __init__(self,
                 aggregate_traffic_counters=None,
                 rule_path=None,
                 tunnel_statistics=None,
                ):
        """
        :type  aggregate_traffic_counters: :class:`IPSecVpnTrafficCounters` or ``None``
        :param aggregate_traffic_counters: Aggregate traffic statistics across all ipsec tunnels.
        :type  rule_path: :class:`str` or ``None``
        :param rule_path: L3Vpn rule path.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  tunnel_statistics: :class:`list` of :class:`IPSecVpnTunnelTrafficStatistics` or ``None``
        :param tunnel_statistics: Tunnel statistics.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.aggregate_traffic_counters = aggregate_traffic_counters
        self.rule_path = rule_path
        self.tunnel_statistics = tunnel_statistics
        VapiStruct.__init__(self)


IPSecVpnPolicyTrafficStatistics._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.IP_sec_vpn_policy_traffic_statistics', {
        'aggregate_traffic_counters': type.OptionalType(type.ReferenceType(__name__, 'IPSecVpnTrafficCounters')),
        'rule_path': type.OptionalType(type.StringType()),
        'tunnel_statistics': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'IPSecVpnTunnelTrafficStatistics'))),
    },
    IPSecVpnPolicyTrafficStatistics,
    False,
    None))



class IPSecVpnRule(VapiStruct):
    """
    For policy-based IPsec VPNs, a security policy specifies as its action the
    VPN tunnel to be used for transit traffic that meets the policy’s match
    criteria.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    ACTION_PROTECT = "PROTECT"
    """


    """
    ACTION_BYPASS = "BYPASS"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'action': 'action',
                            'destinations': 'destinations',
                            'enabled': 'enabled',
                            'logged': 'logged',
                            'sequence_number': 'sequence_number',
                            'sources': 'sources',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 action=None,
                 destinations=None,
                 enabled=None,
                 logged=None,
                 sequence_number=None,
                 sources=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  action: :class:`str` or ``None``
        :param action: Possible values are: 
            
            * :attr:`IPSecVpnRule.ACTION_PROTECT`
            * :attr:`IPSecVpnRule.ACTION_BYPASS`
            
            PROTECT - Protect rules are defined per policy based IPSec VPN
            session. BYPASS - Bypass rules are defined per IPSec VPN service
            and affects all policy based IPSec VPN sessions. Bypass rules are
            prioritized over protect rules.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  destinations: :class:`list` of :class:`IPSecVpnSubnet` or ``None``
        :param destinations: List of peer subnets. Specifying no value is interpreted as
            0.0.0.0/0.
        :type  enabled: :class:`bool` or ``None``
        :param enabled: A flag to enable/disable the rule.
        :type  logged: :class:`bool` or ``None``
        :param logged: A flag to enable/disable the logging for the rule.
        :type  sequence_number: :class:`long` or ``None``
        :param sequence_number: A sequence number is used to give a priority to an IPSecVpnRule.
            format: int32
        :type  sources: :class:`list` of :class:`IPSecVpnSubnet` or ``None``
        :param sources: List of local subnets. Specifying no value is interpreted as
            0.0.0.0/0.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.action = action
        self.destinations = destinations
        self.enabled = enabled
        self.logged = logged
        self.sequence_number = sequence_number
        self.sources = sources
        VapiStruct.__init__(self)


IPSecVpnRule._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.IP_sec_vpn_rule', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'action': type.OptionalType(type.StringType()),
        'destinations': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'IPSecVpnSubnet'))),
        'enabled': type.OptionalType(type.BooleanType()),
        'logged': type.OptionalType(type.BooleanType()),
        'sequence_number': type.OptionalType(type.IntegerType()),
        'sources': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'IPSecVpnSubnet'))),
    },
    IPSecVpnRule,
    False,
    None))



class IPSecVpnService(VapiStruct):
    """
    Create and manage IPSec VPN service for given locale service.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    IKE_LOG_LEVEL_DEBUG = "DEBUG"
    """


    """
    IKE_LOG_LEVEL_INFO = "INFO"
    """


    """
    IKE_LOG_LEVEL_WARN = "WARN"
    """


    """
    IKE_LOG_LEVEL_ERROR = "ERROR"
    """


    """
    IKE_LOG_LEVEL_EMERGENCY = "EMERGENCY"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'bypass_rules': 'bypass_rules',
                            'enabled': 'enabled',
                            'ha_sync': 'ha_sync',
                            'ike_log_level': 'ike_log_level',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 bypass_rules=None,
                 enabled=None,
                 ha_sync=None,
                 ike_log_level=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  bypass_rules: :class:`list` of :class:`IPSecVpnRule` or ``None``
        :param bypass_rules: Bypass policy rules are configured using VPN service. Bypass rules
            always have higher priority over protect rules and they affect all
            policy based vpn sessions associated with the IPSec VPN service.
            Protect rules are defined per policy based vpn session.
        :type  enabled: :class:`bool` or ``None``
        :param enabled: If true, enable VPN services for given locale service.
        :type  ha_sync: :class:`bool` or ``None``
        :param ha_sync: Enable/disable IPSec HA state sync. IPSec HA state sync can be
            disabled if in case there are performance issues w.r.t. the state
            sync messages.
        :type  ike_log_level: :class:`str` or ``None``
        :param ike_log_level: Possible values are: 
            
            * :attr:`IPSecVpnService.IKE_LOG_LEVEL_DEBUG`
            * :attr:`IPSecVpnService.IKE_LOG_LEVEL_INFO`
            * :attr:`IPSecVpnService.IKE_LOG_LEVEL_WARN`
            * :attr:`IPSecVpnService.IKE_LOG_LEVEL_ERROR`
            * :attr:`IPSecVpnService.IKE_LOG_LEVEL_EMERGENCY`
            
             Log level for internet key exchange (IKE).
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.bypass_rules = bypass_rules
        self.enabled = enabled
        self.ha_sync = ha_sync
        self.ike_log_level = ike_log_level
        VapiStruct.__init__(self)


IPSecVpnService._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.IP_sec_vpn_service', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'bypass_rules': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'IPSecVpnRule'))),
        'enabled': type.OptionalType(type.BooleanType()),
        'ha_sync': type.OptionalType(type.BooleanType()),
        'ike_log_level': type.OptionalType(type.StringType()),
    },
    IPSecVpnService,
    False,
    None))



class IPSecVpnServiceListResult(VapiStruct):
    """
    Paged Collection of IPSecVpnService.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`IPSecVpnService` or ``None``
        :param results: IPSecVpnService list results.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


IPSecVpnServiceListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.IP_sec_vpn_service_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'IPSecVpnService'))),
    },
    IPSecVpnServiceListResult,
    False,
    None))



class IPSecVpnSession(VapiStruct):
    """
    VPN session defines connection between local and peer endpoint. Until VPN
    session is defined configuration is not realized.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "IPSecVpnSession"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    RESOURCE_TYPE_POLICYBASEDIPSECVPNSESSION = "PolicyBasedIPSecVpnSession"
    """


    """
    RESOURCE_TYPE_ROUTEBASEDIPSECVPNSESSION = "RouteBasedIPSecVpnSession"
    """


    """
    AUTHENTICATION_MODE_PSK = "PSK"
    """


    """
    AUTHENTICATION_MODE_CERTIFICATE = "CERTIFICATE"
    """


    """
    COMPLIANCE_SUITE_CNSA = "CNSA"
    """


    """
    COMPLIANCE_SUITE_SUITE_B_GCM_128 = "SUITE_B_GCM_128"
    """


    """
    COMPLIANCE_SUITE_SUITE_B_GCM_256 = "SUITE_B_GCM_256"
    """


    """
    COMPLIANCE_SUITE_PRIME = "PRIME"
    """


    """
    COMPLIANCE_SUITE_FOUNDATION = "FOUNDATION"
    """


    """
    COMPLIANCE_SUITE_FIPS = "FIPS"
    """


    """
    COMPLIANCE_SUITE_NONE = "NONE"
    """


    """
    CONNECTION_INITIATION_MODE_INITIATOR = "INITIATOR"
    """


    """
    CONNECTION_INITIATION_MODE_RESPOND_ONLY = "RESPOND_ONLY"
    """


    """
    CONNECTION_INITIATION_MODE_ON_DEMAND = "ON_DEMAND"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'authentication_mode': 'authentication_mode',
                            'compliance_suite': 'compliance_suite',
                            'connection_initiation_mode': 'connection_initiation_mode',
                            'dpd_profile_path': 'dpd_profile_path',
                            'enabled': 'enabled',
                            'ike_profile_path': 'ike_profile_path',
                            'local_endpoint_path': 'local_endpoint_path',
                            'peer_address': 'peer_address',
                            'peer_id': 'peer_id',
                            'psk': 'psk',
                            'tcp_mss_clamping': 'tcp_mss_clamping',
                            'tunnel_profile_path': 'tunnel_profile_path',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='IPSecVpnSession',
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 authentication_mode=None,
                 compliance_suite=None,
                 connection_initiation_mode=None,
                 dpd_profile_path=None,
                 enabled=None,
                 ike_profile_path=None,
                 local_endpoint_path=None,
                 peer_address=None,
                 peer_id=None,
                 psk=None,
                 tcp_mss_clamping=None,
                 tunnel_profile_path=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`IPSecVpnSession.RESOURCE_TYPE_POLICYBASEDIPSECVPNSESSION`
            * :attr:`IPSecVpnSession.RESOURCE_TYPE_ROUTEBASEDIPSECVPNSESSION`
            
            A Policy Based VPN requires to define protect rules that match
            local and peer subnets. IPSec security associations is negotiated
            for each pair of local and peer subnet. A Route Based VPN is more
            flexible, more powerful and recommended over policy based VPN. IP
            Tunnel port is created and all traffic routed via tunnel port is
            protected. Routes can be configured statically or can be learned
            through BGP. A route based VPN is must for establishing redundant
            VPN session to remote site.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  authentication_mode: :class:`str` or ``None``
        :param authentication_mode: Possible values are: 
            
            * :attr:`IPSecVpnSession.AUTHENTICATION_MODE_PSK`
            * :attr:`IPSecVpnSession.AUTHENTICATION_MODE_CERTIFICATE`
            
            Peer authentication mode. PSK - In this mode a secret key shared
            between local and peer sites is to be used for authentication. The
            secret key can be a string with a maximum length of 128 characters.
            CERTIFICATE - In this mode a certificate defined at the global
            level is to be used for authentication.
        :type  compliance_suite: :class:`str` or ``None``
        :param compliance_suite: Possible values are: 
            
            * :attr:`IPSecVpnSession.COMPLIANCE_SUITE_CNSA`
            * :attr:`IPSecVpnSession.COMPLIANCE_SUITE_SUITE_B_GCM_128`
            * :attr:`IPSecVpnSession.COMPLIANCE_SUITE_SUITE_B_GCM_256`
            * :attr:`IPSecVpnSession.COMPLIANCE_SUITE_PRIME`
            * :attr:`IPSecVpnSession.COMPLIANCE_SUITE_FOUNDATION`
            * :attr:`IPSecVpnSession.COMPLIANCE_SUITE_FIPS`
            * :attr:`IPSecVpnSession.COMPLIANCE_SUITE_NONE`
            
             Compliance suite.
        :type  connection_initiation_mode: :class:`str` or ``None``
        :param connection_initiation_mode: Possible values are: 
            
            * :attr:`IPSecVpnSession.CONNECTION_INITIATION_MODE_INITIATOR`
            * :attr:`IPSecVpnSession.CONNECTION_INITIATION_MODE_RESPOND_ONLY`
            * :attr:`IPSecVpnSession.CONNECTION_INITIATION_MODE_ON_DEMAND`
            
            Connection initiation mode used by local endpoint to establish ike
            connection with peer site. INITIATOR - In this mode local endpoint
            initiates tunnel setup and will also respond to incoming tunnel
            setup requests from peer gateway. RESPOND_ONLY - In this mode,
            local endpoint shall only respond to incoming tunnel setup
            requests. It shall not initiate the tunnel setup. ON_DEMAND - In
            this mode local endpoint will initiate tunnel creation once first
            packet matching the policy rule is received and will also respond
            to incoming initiation request.
        :type  dpd_profile_path: :class:`str` or ``None``
        :param dpd_profile_path: Policy path referencing Dead Peer Detection (DPD) profile. Default
            is set to system default profile.
        :type  enabled: :class:`bool` or ``None``
        :param enabled: Enable/Disable IPSec VPN session.
        :type  ike_profile_path: :class:`str` or ``None``
        :param ike_profile_path: Policy path referencing IKE profile to be used. Default is set
            according to system default profile.
        :type  local_endpoint_path: :class:`str` or ``None``
        :param local_endpoint_path: Policy path referencing Local endpoint.
        :type  peer_address: :class:`str` or ``None``
        :param peer_address: Public IPV4 address of the remote device terminating the VPN
            connection.
        :type  peer_id: :class:`str` or ``None``
        :param peer_id: Peer ID to uniquely identify the peer site. The peer ID is the
            public IP address of the remote device terminating the VPN tunnel.
            When NAT is configured for the peer, enter the private IP address
            of the peer.
        :type  psk: :class:`str` or ``None``
        :param psk: IPSec Pre-shared key. Maximum length of this field is 128
            characters.
        :type  tcp_mss_clamping: :class:`TcpMaximumSegmentSizeClamping` or ``None``
        :param tcp_mss_clamping: TCP Maximum Segment Size Clamping Direction and Value.
        :type  tunnel_profile_path: :class:`str` or ``None``
        :param tunnel_profile_path: Policy path referencing Tunnel profile to be used. Default is set
            to system default profile.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.authentication_mode = authentication_mode
        self.compliance_suite = compliance_suite
        self.connection_initiation_mode = connection_initiation_mode
        self.dpd_profile_path = dpd_profile_path
        self.enabled = enabled
        self.ike_profile_path = ike_profile_path
        self.local_endpoint_path = local_endpoint_path
        self.peer_address = peer_address
        self.peer_id = peer_id
        self.psk = psk
        self.tcp_mss_clamping = tcp_mss_clamping
        self.tunnel_profile_path = tunnel_profile_path
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

IPSecVpnSession._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.IP_sec_vpn_session', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'authentication_mode': type.OptionalType(type.StringType()),
        'compliance_suite': type.OptionalType(type.StringType()),
        'connection_initiation_mode': type.OptionalType(type.StringType()),
        'dpd_profile_path': type.OptionalType(type.StringType()),
        'enabled': type.OptionalType(type.BooleanType()),
        'ike_profile_path': type.OptionalType(type.StringType()),
        'local_endpoint_path': type.OptionalType(type.StringType()),
        'peer_address': type.OptionalType(type.StringType()),
        'peer_id': type.OptionalType(type.StringType()),
        'psk': type.OptionalType(type.StringType()),
        'tcp_mss_clamping': type.OptionalType(type.ReferenceType(__name__, 'TcpMaximumSegmentSizeClamping')),
        'tunnel_profile_path': type.OptionalType(type.StringType()),
    },
    IPSecVpnSession,
    False,
    None))



class IPSecVpnSessionListResult(VapiStruct):
    """
    Paged Collection of IPSecVpnSession.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param results: IPSecVpnSession list results.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`IPSecVpnSession`. When methods return a value of this class
            as a return value, the attribute will contain all the attributes
            defined in :class:`IPSecVpnSession`.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


IPSecVpnSessionListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.IP_sec_vpn_session_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'IPSecVpnSession')]))),
    },
    IPSecVpnSessionListResult,
    False,
    None))



class IPSecVpnSessionStatistics(VapiStruct):
    """
    IPSec VPN session statistics represents statistics on an NSX-T type of
    enforcement point. It gives aggregated statistics of all policies for all
    the tunnels.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "IPSecVpnSessionStatistics"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'aggregate_traffic_counters': 'aggregate_traffic_counters',
                            'ike_status': 'ike_status',
                            'ike_traffic_statistics': 'ike_traffic_statistics',
                            'last_update_timestamp': 'last_update_timestamp',
                            'policy_statistics': 'policy_statistics',
                            'enforcement_point_path': 'enforcement_point_path',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 aggregate_traffic_counters=None,
                 ike_status=None,
                 ike_traffic_statistics=None,
                 last_update_timestamp=None,
                 policy_statistics=None,
                 enforcement_point_path=None,
                 resource_type='IPSecVpnSessionStatistics',
                ):
        """
        :type  aggregate_traffic_counters: :class:`IPSecVpnTrafficCounters` or ``None``
        :param aggregate_traffic_counters: Aggregate traffic statistics across all ipsec tunnels.
        :type  ike_status: :class:`IPSecVpnIkeSessionStatus` or ``None``
        :param ike_status: Status for IPSec VPN Ike session UP/DOWN and fail reason if Ike
            session is down.
        :type  ike_traffic_statistics: :class:`IPSecVpnIkeTrafficStatistics` or ``None``
        :param ike_traffic_statistics: Traffic statistics for IPSec VPN Ike session. Note - Not supported
            in this release.
        :type  last_update_timestamp: :class:`long` or ``None``
        :param last_update_timestamp: Timestamp when the data was last updated. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  policy_statistics: :class:`list` of :class:`IPSecVpnPolicyTrafficStatistics` or ``None``
        :param policy_statistics: Gives aggregate traffic statistics across all ipsec tunnels and
            individual tunnel statistics.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  enforcement_point_path: :class:`str` or ``None``
        :param enforcement_point_path: Policy Path referencing the enforcement point wehere the statistics
            are fetched.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`L3VpnStatisticsPerEnforcementPoint.RESOURCE_TYPE_IPSECVPNSESSIONSTATISTICS`
        """
        self.aggregate_traffic_counters = aggregate_traffic_counters
        self.ike_status = ike_status
        self.ike_traffic_statistics = ike_traffic_statistics
        self.last_update_timestamp = last_update_timestamp
        self.policy_statistics = policy_statistics
        self.enforcement_point_path = enforcement_point_path
        self._resource_type = resource_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

IPSecVpnSessionStatistics._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.IP_sec_vpn_session_statistics', {
        'aggregate_traffic_counters': type.OptionalType(type.ReferenceType(__name__, 'IPSecVpnTrafficCounters')),
        'ike_status': type.OptionalType(type.ReferenceType(__name__, 'IPSecVpnIkeSessionStatus')),
        'ike_traffic_statistics': type.OptionalType(type.ReferenceType(__name__, 'IPSecVpnIkeTrafficStatistics')),
        'last_update_timestamp': type.OptionalType(type.IntegerType()),
        'policy_statistics': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'IPSecVpnPolicyTrafficStatistics'))),
        'enforcement_point_path': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
    },
    IPSecVpnSessionStatistics,
    False,
    None))



class IPSecVpnSessionStatisticsNsxt(VapiStruct):
    """
    IPSec VPN session statistics represents statistics on an NSX-T type of
    enforcement point. It gives aggregated statistics of all policies for all
    the tunnels.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "IPSecVpnSessionStatisticsNsxT"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'aggregate_traffic_counters': 'aggregate_traffic_counters',
                            'display_name': 'display_name',
                            'ike_status': 'ike_status',
                            'ike_traffic_statistics': 'ike_traffic_statistics',
                            'last_update_timestamp': 'last_update_timestamp',
                            'policy_statistics': 'policy_statistics',
                            'alarm': 'alarm',
                            'enforcement_point_path': 'enforcement_point_path',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 aggregate_traffic_counters=None,
                 display_name=None,
                 ike_status=None,
                 ike_traffic_statistics=None,
                 last_update_timestamp=None,
                 policy_statistics=None,
                 alarm=None,
                 enforcement_point_path=None,
                 resource_type='IPSecVpnSessionStatisticsNsxT',
                ):
        """
        :type  aggregate_traffic_counters: :class:`IPSecVpnTrafficCounters` or ``None``
        :param aggregate_traffic_counters: Aggregate traffic statistics across all ipsec tunnels.
        :type  display_name: :class:`str` or ``None``
        :param display_name: Display Name of vpn session.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  ike_status: :class:`IPSecVpnIkeSessionStatus` or ``None``
        :param ike_status: Status for IPSec VPN Ike session UP/DOWN and fail reason if Ike
            session is down.
        :type  ike_traffic_statistics: :class:`IPSecVpnIkeTrafficStatistics` or ``None``
        :param ike_traffic_statistics: Traffic statistics for IPSec VPN Ike session.
        :type  last_update_timestamp: :class:`long` or ``None``
        :param last_update_timestamp: Timestamp when the data was last updated. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  policy_statistics: :class:`list` of :class:`IpSecVpnPolicyTrafficStatistics` or ``None``
        :param policy_statistics: Gives aggregate traffic statistics across all ipsec tunnels and
            individual tunnel statistics.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  alarm: :class:`PolicyRuntimeAlarm` or ``None``
        :param alarm: Alarm information details.
        :type  enforcement_point_path: :class:`str` or ``None``
        :param enforcement_point_path: Policy Path referencing the enforcement point where the info is
            fetched.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`IPSecVpnSessionStatisticsPerEP.RESOURCE_TYPE_IPSECVPNSESSIONSTATISTICSNSXT`
        """
        self.aggregate_traffic_counters = aggregate_traffic_counters
        self.display_name = display_name
        self.ike_status = ike_status
        self.ike_traffic_statistics = ike_traffic_statistics
        self.last_update_timestamp = last_update_timestamp
        self.policy_statistics = policy_statistics
        self.alarm = alarm
        self.enforcement_point_path = enforcement_point_path
        self._resource_type = resource_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

IPSecVpnSessionStatisticsNsxt._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.IP_sec_vpn_session_statistics_nsxt', {
        'aggregate_traffic_counters': type.OptionalType(type.ReferenceType(__name__, 'IPSecVpnTrafficCounters')),
        'display_name': type.OptionalType(type.StringType()),
        'ike_status': type.OptionalType(type.ReferenceType(__name__, 'IPSecVpnIkeSessionStatus')),
        'ike_traffic_statistics': type.OptionalType(type.ReferenceType(__name__, 'IPSecVpnIkeTrafficStatistics')),
        'last_update_timestamp': type.OptionalType(type.IntegerType()),
        'policy_statistics': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'IpSecVpnPolicyTrafficStatistics'))),
        'alarm': type.OptionalType(type.ReferenceType(__name__, 'PolicyRuntimeAlarm')),
        'enforcement_point_path': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
    },
    IPSecVpnSessionStatisticsNsxt,
    False,
    None))



class IPSecVpnSessionStatisticsPerEP(VapiStruct):
    """
    IPSec VPN Session Statistics Per Enforcement Point.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "IPSecVpnSessionStatisticsPerEP"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    RESOURCE_TYPE_IPSECVPNSESSIONSTATISTICSNSXT = "IPSecVpnSessionStatisticsNsxT"
    """


    """



    _canonical_to_pep_names = {
                            'alarm': 'alarm',
                            'enforcement_point_path': 'enforcement_point_path',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 alarm=None,
                 enforcement_point_path=None,
                 resource_type='IPSecVpnSessionStatisticsPerEP',
                ):
        """
        :type  alarm: :class:`PolicyRuntimeAlarm` or ``None``
        :param alarm: Alarm information details.
        :type  enforcement_point_path: :class:`str` or ``None``
        :param enforcement_point_path: Policy Path referencing the enforcement point where the info is
            fetched.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`IPSecVpnSessionStatisticsPerEP.RESOURCE_TYPE_IPSECVPNSESSIONSTATISTICSNSXT`
        """
        self.alarm = alarm
        self.enforcement_point_path = enforcement_point_path
        self._resource_type = resource_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

IPSecVpnSessionStatisticsPerEP._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.IP_sec_vpn_session_statistics_per_EP', {
        'alarm': type.OptionalType(type.ReferenceType(__name__, 'PolicyRuntimeAlarm')),
        'enforcement_point_path': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
    },
    IPSecVpnSessionStatisticsPerEP,
    False,
    None))



class IPSecVpnSessionStatusNsxt(VapiStruct):
    """
    IPSec VPN Session Status represents status on an NSX-T type of enforcement
    point.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "IPSecVpnSessionStatusNsxT"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    RUNTIME_STATUS_UP = "UP"
    """


    """
    RUNTIME_STATUS_DOWN = "DOWN"
    """


    """
    RUNTIME_STATUS_DEGRADED = "DEGRADED"
    """


    """



    _canonical_to_pep_names = {
                            'aggregate_traffic_counters': 'aggregate_traffic_counters',
                            'display_name': 'display_name',
                            'failed_tunnels': 'failed_tunnels',
                            'ike_status': 'ike_status',
                            'last_update_timestamp': 'last_update_timestamp',
                            'negotiated_tunnels': 'negotiated_tunnels',
                            'runtime_status': 'runtime_status',
                            'total_tunnels': 'total_tunnels',
                            'alarm': 'alarm',
                            'enforcement_point_path': 'enforcement_point_path',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 aggregate_traffic_counters=None,
                 display_name=None,
                 failed_tunnels=None,
                 ike_status=None,
                 last_update_timestamp=None,
                 negotiated_tunnels=None,
                 runtime_status=None,
                 total_tunnels=None,
                 alarm=None,
                 enforcement_point_path=None,
                 resource_type='IPSecVpnSessionStatusNsxT',
                ):
        """
        :type  aggregate_traffic_counters: :class:`IPSecVpnTrafficCounters` or ``None``
        :param aggregate_traffic_counters: Aggregate traffic statistics across all ipsec tunnels.
        :type  display_name: :class:`str` or ``None``
        :param display_name: Display Name of vpn session.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  failed_tunnels: :class:`long` or ``None``
        :param failed_tunnels: Number of failed tunnels. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  ike_status: :class:`IPSecVpnIkeSessionStatus` or ``None``
        :param ike_status: Status for IPSec VPN IKE session UP/DOWN and fail reason if IKE
            session is down.
        :type  last_update_timestamp: :class:`long` or ``None``
        :param last_update_timestamp: Timestamp when the data was last updated. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  negotiated_tunnels: :class:`long` or ``None``
        :param negotiated_tunnels: Number of negotiated tunnels. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  runtime_status: :class:`str` or ``None``
        :param runtime_status: Possible values are: 
            
            * :attr:`IPSecVpnSessionStatusNsxt.RUNTIME_STATUS_UP`
            * :attr:`IPSecVpnSessionStatusNsxt.RUNTIME_STATUS_DOWN`
            * :attr:`IPSecVpnSessionStatusNsxt.RUNTIME_STATUS_DEGRADED`
            
            Gives session status consolidated using IKE status and tunnel
            status. It can be UP, DOWN, DEGRADED. If IKE and all tunnels are UP
            status will be UP, if all down it will be DOWN, otherwise it will
            be DEGRADED.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  total_tunnels: :class:`long` or ``None``
        :param total_tunnels: Total number of tunnels. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  alarm: :class:`PolicyRuntimeAlarm` or ``None``
        :param alarm: Alarm information details.
        :type  enforcement_point_path: :class:`str` or ``None``
        :param enforcement_point_path: Policy Path referencing the enforcement point where the info is
            fetched.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`IPSecVpnSessionStatusPerEP.RESOURCE_TYPE_IPSECVPNSESSIONSTATUSNSXT`
        """
        self.aggregate_traffic_counters = aggregate_traffic_counters
        self.display_name = display_name
        self.failed_tunnels = failed_tunnels
        self.ike_status = ike_status
        self.last_update_timestamp = last_update_timestamp
        self.negotiated_tunnels = negotiated_tunnels
        self.runtime_status = runtime_status
        self.total_tunnels = total_tunnels
        self.alarm = alarm
        self.enforcement_point_path = enforcement_point_path
        self._resource_type = resource_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

IPSecVpnSessionStatusNsxt._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.IP_sec_vpn_session_status_nsxt', {
        'aggregate_traffic_counters': type.OptionalType(type.ReferenceType(__name__, 'IPSecVpnTrafficCounters')),
        'display_name': type.OptionalType(type.StringType()),
        'failed_tunnels': type.OptionalType(type.IntegerType()),
        'ike_status': type.OptionalType(type.ReferenceType(__name__, 'IPSecVpnIkeSessionStatus')),
        'last_update_timestamp': type.OptionalType(type.IntegerType()),
        'negotiated_tunnels': type.OptionalType(type.IntegerType()),
        'runtime_status': type.OptionalType(type.StringType()),
        'total_tunnels': type.OptionalType(type.IntegerType()),
        'alarm': type.OptionalType(type.ReferenceType(__name__, 'PolicyRuntimeAlarm')),
        'enforcement_point_path': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
    },
    IPSecVpnSessionStatusNsxt,
    False,
    None))



class IPSecVpnSessionStatusPerEP(VapiStruct):
    """
    IPSec VPN Session Status Per Enforcement Point.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "IPSecVpnSessionStatusPerEP"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    RESOURCE_TYPE_IPSECVPNSESSIONSTATUSNSXT = "IPSecVpnSessionStatusNsxT"
    """


    """



    _canonical_to_pep_names = {
                            'alarm': 'alarm',
                            'enforcement_point_path': 'enforcement_point_path',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 alarm=None,
                 enforcement_point_path=None,
                 resource_type='IPSecVpnSessionStatusPerEP',
                ):
        """
        :type  alarm: :class:`PolicyRuntimeAlarm` or ``None``
        :param alarm: Alarm information details.
        :type  enforcement_point_path: :class:`str` or ``None``
        :param enforcement_point_path: Policy Path referencing the enforcement point where the info is
            fetched.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`IPSecVpnSessionStatusPerEP.RESOURCE_TYPE_IPSECVPNSESSIONSTATUSNSXT`
        """
        self.alarm = alarm
        self.enforcement_point_path = enforcement_point_path
        self._resource_type = resource_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

IPSecVpnSessionStatusPerEP._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.IP_sec_vpn_session_status_per_EP', {
        'alarm': type.OptionalType(type.ReferenceType(__name__, 'PolicyRuntimeAlarm')),
        'enforcement_point_path': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
    },
    IPSecVpnSessionStatusPerEP,
    False,
    None))



class IPSecVpnSubnet(VapiStruct):
    """
    Used to specify the local/peer subnets in IPSec VPN rule.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'subnet': 'subnet',
                            }

    def __init__(self,
                 subnet=None,
                ):
        """
        :type  subnet: :class:`str` or ``None``
        :param subnet: Subnet used in policy rule. format: ipv4-cidr-block
        """
        self.subnet = subnet
        VapiStruct.__init__(self)


IPSecVpnSubnet._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.IP_sec_vpn_subnet', {
        'subnet': type.OptionalType(type.StringType()),
    },
    IPSecVpnSubnet,
    False,
    None))



class IPSecVpnTrafficCounters(VapiStruct):
    """
    Traffic counters for IPSec VPN session.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'bytes_in': 'bytes_in',
                            'bytes_out': 'bytes_out',
                            'dropped_packets_in': 'dropped_packets_in',
                            'dropped_packets_out': 'dropped_packets_out',
                            'packets_in': 'packets_in',
                            'packets_out': 'packets_out',
                            }

    def __init__(self,
                 bytes_in=None,
                 bytes_out=None,
                 dropped_packets_in=None,
                 dropped_packets_out=None,
                 packets_in=None,
                 packets_out=None,
                ):
        """
        :type  bytes_in: :class:`long` or ``None``
        :param bytes_in: Total number of bytes recevied. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  bytes_out: :class:`long` or ``None``
        :param bytes_out: Total number of bytes sent. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  dropped_packets_in: :class:`long` or ``None``
        :param dropped_packets_in: Total number of incoming packets dropped on inbound security
            association. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  dropped_packets_out: :class:`long` or ``None``
        :param dropped_packets_out: Total number of outgoing packets dropped on outbound security
            association. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  packets_in: :class:`long` or ``None``
        :param packets_in: Total number of packets received. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  packets_out: :class:`long` or ``None``
        :param packets_out: Total number of packets sent. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.bytes_in = bytes_in
        self.bytes_out = bytes_out
        self.dropped_packets_in = dropped_packets_in
        self.dropped_packets_out = dropped_packets_out
        self.packets_in = packets_in
        self.packets_out = packets_out
        VapiStruct.__init__(self)


IPSecVpnTrafficCounters._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.IP_sec_vpn_traffic_counters', {
        'bytes_in': type.OptionalType(type.IntegerType()),
        'bytes_out': type.OptionalType(type.IntegerType()),
        'dropped_packets_in': type.OptionalType(type.IntegerType()),
        'dropped_packets_out': type.OptionalType(type.IntegerType()),
        'packets_in': type.OptionalType(type.IntegerType()),
        'packets_out': type.OptionalType(type.IntegerType()),
    },
    IPSecVpnTrafficCounters,
    False,
    None))



class IPSecVpnTransportStatus(VapiStruct):
    """
    Provides IPSec VPN session status.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "IPSecVpnTransportStatus"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'session_status': 'session_status',
                            'resource_type': 'resource_type',
                            'transport_tunnel_path': 'transport_tunnel_path',
                            }

    def __init__(self,
                 session_status=None,
                 resource_type='IPSecVpnTransportStatus',
                 transport_tunnel_path=None,
                ):
        """
        :type  session_status: :class:`IPSecVpnSessionStatusNsxt` or ``None``
        :param session_status: IPSec VPN Session status
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`L2VPNSessionTransportTunnelStatus.RESOURCE_TYPE_IPSECVPNTRANSPORTSTATUS`
        :type  transport_tunnel_path: :class:`str` or ``None``
        :param transport_tunnel_path: Policy path referencing Transport Tunnel.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.session_status = session_status
        self._resource_type = resource_type
        self.transport_tunnel_path = transport_tunnel_path
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

IPSecVpnTransportStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.IP_sec_vpn_transport_status', {
        'session_status': type.OptionalType(type.ReferenceType(__name__, 'IPSecVpnSessionStatusNsxt')),
        'resource_type': type.StringType(),
        'transport_tunnel_path': type.OptionalType(type.StringType()),
    },
    IPSecVpnTransportStatus,
    False,
    None))



class IPSecVpnTunnelInterface(VapiStruct):
    """
    IP tunnel interface configuration.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'ip_subnets': 'ip_subnets',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 ip_subnets=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  ip_subnets: :class:`list` of :class:`TunnelInterfaceIPSubnet` or ``None``
        :param ip_subnets: IP Tunnel interface (commonly referred as VTI) subnet.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.ip_subnets = ip_subnets
        VapiStruct.__init__(self)


IPSecVpnTunnelInterface._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.IP_sec_vpn_tunnel_interface', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'ip_subnets': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'TunnelInterfaceIPSubnet'))),
    },
    IPSecVpnTunnelInterface,
    False,
    None))



class IPSecVpnTunnelProfile(VapiStruct):
    """
    IPSec VPN tunnel profile is a reusable profile that captures phase two
    negotiation parameters and IPSec tunnel properties. Any changes affects all
    IPSec VPN sessions consuming this profile.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    DF_POLICY_COPY = "COPY"
    """


    """
    DF_POLICY_CLEAR = "CLEAR"
    """


    """
    DH_GROUPS_GROUP2 = "GROUP2"
    """


    """
    DH_GROUPS_GROUP5 = "GROUP5"
    """


    """
    DH_GROUPS_GROUP14 = "GROUP14"
    """


    """
    DH_GROUPS_GROUP15 = "GROUP15"
    """


    """
    DH_GROUPS_GROUP16 = "GROUP16"
    """


    """
    DH_GROUPS_GROUP19 = "GROUP19"
    """


    """
    DH_GROUPS_GROUP20 = "GROUP20"
    """


    """
    DH_GROUPS_GROUP21 = "GROUP21"
    """


    """
    DIGEST_ALGORITHMS_SHA1 = "SHA1"
    """


    """
    DIGEST_ALGORITHMS_SHA2_256 = "SHA2_256"
    """


    """
    DIGEST_ALGORITHMS_SHA2_384 = "SHA2_384"
    """


    """
    DIGEST_ALGORITHMS_SHA2_512 = "SHA2_512"
    """


    """
    ENCRYPTION_ALGORITHMS_AES_128 = "AES_128"
    """


    """
    ENCRYPTION_ALGORITHMS_AES_256 = "AES_256"
    """


    """
    ENCRYPTION_ALGORITHMS_AES_GCM_128 = "AES_GCM_128"
    """


    """
    ENCRYPTION_ALGORITHMS_AES_GCM_192 = "AES_GCM_192"
    """


    """
    ENCRYPTION_ALGORITHMS_AES_GCM_256 = "AES_GCM_256"
    """


    """
    ENCRYPTION_ALGORITHMS_NO_ENCRYPTION_AUTH_AES_GMAC_128 = "NO_ENCRYPTION_AUTH_AES_GMAC_128"
    """


    """
    ENCRYPTION_ALGORITHMS_NO_ENCRYPTION_AUTH_AES_GMAC_192 = "NO_ENCRYPTION_AUTH_AES_GMAC_192"
    """


    """
    ENCRYPTION_ALGORITHMS_NO_ENCRYPTION_AUTH_AES_GMAC_256 = "NO_ENCRYPTION_AUTH_AES_GMAC_256"
    """


    """
    ENCRYPTION_ALGORITHMS_NO_ENCRYPTION = "NO_ENCRYPTION"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'df_policy': 'df_policy',
                            'dh_groups': 'dh_groups',
                            'digest_algorithms': 'digest_algorithms',
                            'enable_perfect_forward_secrecy': 'enable_perfect_forward_secrecy',
                            'encryption_algorithms': 'encryption_algorithms',
                            'extended_attributes': 'extended_attributes',
                            'sa_life_time': 'sa_life_time',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 df_policy=None,
                 dh_groups=None,
                 digest_algorithms=None,
                 enable_perfect_forward_secrecy=None,
                 encryption_algorithms=None,
                 extended_attributes=None,
                 sa_life_time=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  df_policy: :class:`str` or ``None``
        :param df_policy: Possible values are: 
            
            * :attr:`IPSecVpnTunnelProfile.DF_POLICY_COPY`
            * :attr:`IPSecVpnTunnelProfile.DF_POLICY_CLEAR`
            
            Defragmentation policy helps to handle defragmentation bit present
            in the inner packet. COPY copies the defragmentation bit from the
            inner IP packet into the outer packet. CLEAR ignores the
            defragmentation bit present in the inner packet.
        :type  dh_groups: :class:`list` of :class:`str` or ``None``
        :param dh_groups: Possible values are: 
            
            * :attr:`IPSecVpnTunnelProfile.DH_GROUPS_GROUP2`
            * :attr:`IPSecVpnTunnelProfile.DH_GROUPS_GROUP5`
            * :attr:`IPSecVpnTunnelProfile.DH_GROUPS_GROUP14`
            * :attr:`IPSecVpnTunnelProfile.DH_GROUPS_GROUP15`
            * :attr:`IPSecVpnTunnelProfile.DH_GROUPS_GROUP16`
            * :attr:`IPSecVpnTunnelProfile.DH_GROUPS_GROUP19`
            * :attr:`IPSecVpnTunnelProfile.DH_GROUPS_GROUP20`
            * :attr:`IPSecVpnTunnelProfile.DH_GROUPS_GROUP21`
            
            Diffie-Hellman group to be used if PFS is enabled. Default is
            GROUP14.
        :type  digest_algorithms: :class:`list` of :class:`str` or ``None``
        :param digest_algorithms: Possible values are: 
            
            * :attr:`IPSecVpnTunnelProfile.DIGEST_ALGORITHMS_SHA1`
            * :attr:`IPSecVpnTunnelProfile.DIGEST_ALGORITHMS_SHA2_256`
            * :attr:`IPSecVpnTunnelProfile.DIGEST_ALGORITHMS_SHA2_384`
            * :attr:`IPSecVpnTunnelProfile.DIGEST_ALGORITHMS_SHA2_512`
            
            Algorithm to be used for message digest. Default digest algorithm
            is implicitly covered by default encryption algorithm
            \"AES_GCM_128\".
        :type  enable_perfect_forward_secrecy: :class:`bool` or ``None``
        :param enable_perfect_forward_secrecy: If true, perfect forward secrecy (PFS) is enabled.
        :type  encryption_algorithms: :class:`list` of :class:`str` or ``None``
        :param encryption_algorithms: Possible values are: 
            
            * :attr:`IPSecVpnTunnelProfile.ENCRYPTION_ALGORITHMS_AES_128`
            * :attr:`IPSecVpnTunnelProfile.ENCRYPTION_ALGORITHMS_AES_256`
            * :attr:`IPSecVpnTunnelProfile.ENCRYPTION_ALGORITHMS_AES_GCM_128`
            * :attr:`IPSecVpnTunnelProfile.ENCRYPTION_ALGORITHMS_AES_GCM_192`
            * :attr:`IPSecVpnTunnelProfile.ENCRYPTION_ALGORITHMS_AES_GCM_256`
            *
              :attr:`IPSecVpnTunnelProfile.ENCRYPTION_ALGORITHMS_NO_ENCRYPTION_AUTH_AES_GMAC_128`
            *
              :attr:`IPSecVpnTunnelProfile.ENCRYPTION_ALGORITHMS_NO_ENCRYPTION_AUTH_AES_GMAC_192`
            *
              :attr:`IPSecVpnTunnelProfile.ENCRYPTION_ALGORITHMS_NO_ENCRYPTION_AUTH_AES_GMAC_256`
            * :attr:`IPSecVpnTunnelProfile.ENCRYPTION_ALGORITHMS_NO_ENCRYPTION`
            
            Encryption algorithm to encrypt/decrypt the messages exchanged
            between IPSec VPN initiator and responder during tunnel
            negotiation. Default is AES_GCM_128.
        :type  extended_attributes: :class:`list` of :class:`AttributeVal` or ``None``
        :param extended_attributes: Collection of type specific properties. As of now, to hold
            encapsulation mode and transform protocol.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sa_life_time: :class:`long` or ``None``
        :param sa_life_time: SA life time specifies the expiry time of security association.
            Default is 3600 seconds. format: int64
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.df_policy = df_policy
        self.dh_groups = dh_groups
        self.digest_algorithms = digest_algorithms
        self.enable_perfect_forward_secrecy = enable_perfect_forward_secrecy
        self.encryption_algorithms = encryption_algorithms
        self.extended_attributes = extended_attributes
        self.sa_life_time = sa_life_time
        VapiStruct.__init__(self)


IPSecVpnTunnelProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.IP_sec_vpn_tunnel_profile', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'df_policy': type.OptionalType(type.StringType()),
        'dh_groups': type.OptionalType(type.ListType(type.StringType())),
        'digest_algorithms': type.OptionalType(type.ListType(type.StringType())),
        'enable_perfect_forward_secrecy': type.OptionalType(type.BooleanType()),
        'encryption_algorithms': type.OptionalType(type.ListType(type.StringType())),
        'extended_attributes': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'AttributeVal'))),
        'sa_life_time': type.OptionalType(type.IntegerType()),
    },
    IPSecVpnTunnelProfile,
    False,
    None))



class IPSecVpnTunnelProfileListResult(VapiStruct):
    """
    Paged Collection of IPSecVpnTunnelProfile.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`IPSecVpnTunnelProfile` or ``None``
        :param results: IPSecVpnTunnelProfile list results.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


IPSecVpnTunnelProfileListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.IP_sec_vpn_tunnel_profile_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'IPSecVpnTunnelProfile'))),
    },
    IPSecVpnTunnelProfileListResult,
    False,
    None))



class IPSecVpnTunnelTrafficStatistics(VapiStruct):
    """
    IPSec VPN tunnel traffic statistics.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    TUNNEL_STATUS_UP = "UP"
    """


    """
    TUNNEL_STATUS_DOWN = "DOWN"
    """


    """



    _canonical_to_pep_names = {
                            'bytes_in': 'bytes_in',
                            'bytes_out': 'bytes_out',
                            'decryption_failures': 'decryption_failures',
                            'dropped_packets_in': 'dropped_packets_in',
                            'dropped_packets_out': 'dropped_packets_out',
                            'encryption_failures': 'encryption_failures',
                            'integrity_failures': 'integrity_failures',
                            'local_subnet': 'local_subnet',
                            'nomatching_policy_errors': 'nomatching_policy_errors',
                            'packets_in': 'packets_in',
                            'packets_out': 'packets_out',
                            'packets_received_other_error': 'packets_received_other_error',
                            'packets_sent_other_error': 'packets_sent_other_error',
                            'remote_subnet': 'remote_subnet',
                            'replay_errors': 'replay_errors',
                            'sa_mismatch_errors_in': 'sa_mismatch_errors_in',
                            'sa_mismatch_errors_out': 'sa_mismatch_errors_out',
                            'seq_number_overflow_error': 'seq_number_overflow_error',
                            'tunnel_down_reason': 'tunnel_down_reason',
                            'tunnel_status': 'tunnel_status',
                            }

    def __init__(self,
                 bytes_in=None,
                 bytes_out=None,
                 decryption_failures=None,
                 dropped_packets_in=None,
                 dropped_packets_out=None,
                 encryption_failures=None,
                 integrity_failures=None,
                 local_subnet=None,
                 nomatching_policy_errors=None,
                 packets_in=None,
                 packets_out=None,
                 packets_received_other_error=None,
                 packets_sent_other_error=None,
                 remote_subnet=None,
                 replay_errors=None,
                 sa_mismatch_errors_in=None,
                 sa_mismatch_errors_out=None,
                 seq_number_overflow_error=None,
                 tunnel_down_reason=None,
                 tunnel_status=None,
                ):
        """
        :type  bytes_in: :class:`long` or ``None``
        :param bytes_in: Total number of incoming bytes on inbound Security association.
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  bytes_out: :class:`long` or ``None``
        :param bytes_out: Total number of outgoing bytes on outbound Security association.
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  decryption_failures: :class:`long` or ``None``
        :param decryption_failures: Total number of packets dropped due to decryption failures. format:
            int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  dropped_packets_in: :class:`long` or ``None``
        :param dropped_packets_in: Total number of incoming packets dropped on inbound security
            association. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  dropped_packets_out: :class:`long` or ``None``
        :param dropped_packets_out: Total number of outgoing packets dropped on outbound security
            association. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  encryption_failures: :class:`long` or ``None``
        :param encryption_failures: Total number of packets dropped because of failure in encryption.
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  integrity_failures: :class:`long` or ``None``
        :param integrity_failures: Total number of packets dropped due to integrity failures. format:
            int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  local_subnet: :class:`str` or ``None``
        :param local_subnet: Local subnet to which a tunnel belongs.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  nomatching_policy_errors: :class:`long` or ``None``
        :param nomatching_policy_errors: Number of packets dropped because of no matching policy is
            available. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  packets_in: :class:`long` or ``None``
        :param packets_in: Total number of incoming packets on inbound Security association.
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  packets_out: :class:`long` or ``None``
        :param packets_out: Total number of outgoing packets on outbound Security association.
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  packets_received_other_error: :class:`long` or ``None``
        :param packets_received_other_error: Total number of incoming packets dropped on inbound Security
            association. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  packets_sent_other_error: :class:`long` or ``None``
        :param packets_sent_other_error: Total number of packets dropped while sending for any reason.
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  remote_subnet: :class:`str` or ``None``
        :param remote_subnet: Peer subnet to which a tunnel belongs.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  replay_errors: :class:`long` or ``None``
        :param replay_errors: Total number of packets dropped due to replay check on that
            Security association. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sa_mismatch_errors_in: :class:`long` or ``None``
        :param sa_mismatch_errors_in: Totoal number of security association mismatch errors on incoming
            packets. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sa_mismatch_errors_out: :class:`long` or ``None``
        :param sa_mismatch_errors_out: Totoal number of security association mismatch errors on outgoing
            packets. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  seq_number_overflow_error: :class:`long` or ``None``
        :param seq_number_overflow_error: Total number of packets dropped while sending due to overflow in
            sequence number. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  tunnel_down_reason: :class:`str` or ``None``
        :param tunnel_down_reason: Gives the detailed reason about the tunnel when it is down. If
            tunnel is UP tunnel down reason will be empty.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  tunnel_status: :class:`str` or ``None``
        :param tunnel_status: Possible values are: 
            
            * :attr:`IPSecVpnTunnelTrafficStatistics.TUNNEL_STATUS_UP`
            * :attr:`IPSecVpnTunnelTrafficStatistics.TUNNEL_STATUS_DOWN`
            
             Specifies the status of tunnel, if it is UP/DOWN.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.bytes_in = bytes_in
        self.bytes_out = bytes_out
        self.decryption_failures = decryption_failures
        self.dropped_packets_in = dropped_packets_in
        self.dropped_packets_out = dropped_packets_out
        self.encryption_failures = encryption_failures
        self.integrity_failures = integrity_failures
        self.local_subnet = local_subnet
        self.nomatching_policy_errors = nomatching_policy_errors
        self.packets_in = packets_in
        self.packets_out = packets_out
        self.packets_received_other_error = packets_received_other_error
        self.packets_sent_other_error = packets_sent_other_error
        self.remote_subnet = remote_subnet
        self.replay_errors = replay_errors
        self.sa_mismatch_errors_in = sa_mismatch_errors_in
        self.sa_mismatch_errors_out = sa_mismatch_errors_out
        self.seq_number_overflow_error = seq_number_overflow_error
        self.tunnel_down_reason = tunnel_down_reason
        self.tunnel_status = tunnel_status
        VapiStruct.__init__(self)


IPSecVpnTunnelTrafficStatistics._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.IP_sec_vpn_tunnel_traffic_statistics', {
        'bytes_in': type.OptionalType(type.IntegerType()),
        'bytes_out': type.OptionalType(type.IntegerType()),
        'decryption_failures': type.OptionalType(type.IntegerType()),
        'dropped_packets_in': type.OptionalType(type.IntegerType()),
        'dropped_packets_out': type.OptionalType(type.IntegerType()),
        'encryption_failures': type.OptionalType(type.IntegerType()),
        'integrity_failures': type.OptionalType(type.IntegerType()),
        'local_subnet': type.OptionalType(type.StringType()),
        'nomatching_policy_errors': type.OptionalType(type.IntegerType()),
        'packets_in': type.OptionalType(type.IntegerType()),
        'packets_out': type.OptionalType(type.IntegerType()),
        'packets_received_other_error': type.OptionalType(type.IntegerType()),
        'packets_sent_other_error': type.OptionalType(type.IntegerType()),
        'remote_subnet': type.OptionalType(type.StringType()),
        'replay_errors': type.OptionalType(type.IntegerType()),
        'sa_mismatch_errors_in': type.OptionalType(type.IntegerType()),
        'sa_mismatch_errors_out': type.OptionalType(type.IntegerType()),
        'seq_number_overflow_error': type.OptionalType(type.IntegerType()),
        'tunnel_down_reason': type.OptionalType(type.StringType()),
        'tunnel_status': type.OptionalType(type.StringType()),
    },
    IPSecVpnTunnelTrafficStatistics,
    False,
    None))



class IPv4DiscoveryOptions(VapiStruct):
    """
    Contains IPv4 related discovery options.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'arp_snooping_config': 'arp_snooping_config',
                            'dhcp_snooping_enabled': 'dhcp_snooping_enabled',
                            'vmtools_enabled': 'vmtools_enabled',
                            }

    def __init__(self,
                 arp_snooping_config=None,
                 dhcp_snooping_enabled=None,
                 vmtools_enabled=None,
                ):
        """
        :type  arp_snooping_config: :class:`ArpSnoopingConfig` or ``None``
        :param arp_snooping_config: Indicates ARP snooping options
        :type  dhcp_snooping_enabled: :class:`bool` or ``None``
        :param dhcp_snooping_enabled: Indicates whether DHCP snooping is enabled
        :type  vmtools_enabled: :class:`bool` or ``None``
        :param vmtools_enabled: Indicates whether fetching IP using vm-tools is enabled. This
            option is only supported on ESX where vm-tools is installed.
        """
        self.arp_snooping_config = arp_snooping_config
        self.dhcp_snooping_enabled = dhcp_snooping_enabled
        self.vmtools_enabled = vmtools_enabled
        VapiStruct.__init__(self)


IPv4DiscoveryOptions._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.I_pv4_discovery_options', {
        'arp_snooping_config': type.OptionalType(type.ReferenceType(__name__, 'ArpSnoopingConfig')),
        'dhcp_snooping_enabled': type.OptionalType(type.BooleanType()),
        'vmtools_enabled': type.OptionalType(type.BooleanType()),
    },
    IPv4DiscoveryOptions,
    False,
    None))



class IPv6DADStatus(VapiStruct):
    """
    IPv6 DAD status

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    STATUS_DUPLICATED = "DUPLICATED"
    """


    """
    STATUS_TENTATIVE = "TENTATIVE"
    """


    """
    STATUS_ASSIGNED = "ASSIGNED"
    """


    """
    STATUS_NOT_APPLICABLE = "NOT_APPLICABLE"
    """


    """
    STATUS_UNKNOWN = "UNKNOWN"
    """


    """



    _canonical_to_pep_names = {
                            'ip_address': 'ip_address',
                            'status': 'status',
                            'transport_node': 'transport_node',
                            }

    def __init__(self,
                 ip_address=None,
                 status=None,
                 transport_node=None,
                ):
        """
        :type  ip_address: :class:`str` or ``None``
        :param ip_address: IP address on the port for which DAD status is reported. format: ip
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  status: :class:`str` or ``None``
        :param status: Possible values are: 
            
            * :attr:`IPv6DADStatus.STATUS_DUPLICATED`
            * :attr:`IPv6DADStatus.STATUS_TENTATIVE`
            * :attr:`IPv6DADStatus.STATUS_ASSIGNED`
            * :attr:`IPv6DADStatus.STATUS_NOT_APPLICABLE`
            * :attr:`IPv6DADStatus.STATUS_UNKNOWN`
            
             DAD status for IP address on the port.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  transport_node: :class:`list` of :class:`ResourceReference` or ``None``
        :param transport_node: Array of transport node id on which DAD status is reported for
            given IP address.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.ip_address = ip_address
        self.status = status
        self.transport_node = transport_node
        VapiStruct.__init__(self)


IPv6DADStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.I_pv6_DAD_status', {
        'ip_address': type.OptionalType(type.StringType()),
        'status': type.OptionalType(type.StringType()),
        'transport_node': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceReference'))),
    },
    IPv6DADStatus,
    False,
    None))



class IPv6DiscoveryOptions(VapiStruct):
    """
    Contains IPv6 related discovery options.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'dhcp_snooping_v6_enabled': 'dhcp_snooping_v6_enabled',
                            'nd_snooping_config': 'nd_snooping_config',
                            'vmtools_v6_enabled': 'vmtools_v6_enabled',
                            }

    def __init__(self,
                 dhcp_snooping_v6_enabled=None,
                 nd_snooping_config=None,
                 vmtools_v6_enabled=None,
                ):
        """
        :type  dhcp_snooping_v6_enabled: :class:`bool` or ``None``
        :param dhcp_snooping_v6_enabled: Enable this method will snoop the DHCPv6 message transaction which
            a VM makes with a DHCPv6 server. From the transaction, we learn the
            IPv6 addresses assigned by the DHCPv6 server to this VM along with
            its lease time.
        :type  nd_snooping_config: :class:`NdSnoopingConfig` or ``None``
        :param nd_snooping_config: Indicates ND snooping options
        :type  vmtools_v6_enabled: :class:`bool` or ``None``
        :param vmtools_v6_enabled: Enable this method will learn the IPv6 addresses which are
            configured on interfaces of a VM with the help of the VMTools
            software.
        """
        self.dhcp_snooping_v6_enabled = dhcp_snooping_v6_enabled
        self.nd_snooping_config = nd_snooping_config
        self.vmtools_v6_enabled = vmtools_v6_enabled
        VapiStruct.__init__(self)


IPv6DiscoveryOptions._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.I_pv6_discovery_options', {
        'dhcp_snooping_v6_enabled': type.OptionalType(type.BooleanType()),
        'nd_snooping_config': type.OptionalType(type.ReferenceType(__name__, 'NdSnoopingConfig')),
        'vmtools_v6_enabled': type.OptionalType(type.BooleanType()),
    },
    IPv6DiscoveryOptions,
    False,
    None))



class IPv6Status(VapiStruct):
    """
    IPv6 status

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'connected_segment_path': 'connected_segment_path',
                            'dad_statuses': 'dad_statuses',
                            'interface_id': 'interface_id',
                            }

    def __init__(self,
                 connected_segment_path=None,
                 dad_statuses=None,
                 interface_id=None,
                ):
        """
        :type  connected_segment_path: :class:`str` or ``None``
        :param connected_segment_path: Path of the segment attached to the interface.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  dad_statuses: :class:`list` of :class:`IPv6DADStatus` or ``None``
        :param dad_statuses: Array of DAD status which contains DAD information for IP addresses
            on the interface.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  interface_id: :class:`str` or ``None``
        :param interface_id: Policy path or realization ID of interface for which IPv6 DAD
            status is returned.
        """
        self.connected_segment_path = connected_segment_path
        self.dad_statuses = dad_statuses
        self.interface_id = interface_id
        VapiStruct.__init__(self)


IPv6Status._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.I_pv6_status', {
        'connected_segment_path': type.OptionalType(type.StringType()),
        'dad_statuses': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'IPv6DADStatus'))),
        'interface_id': type.OptionalType(type.StringType()),
    },
    IPv6Status,
    False,
    None))



class IcmpEchoRequestHeader(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'id': 'id',
                            'sequence': 'sequence',
                            }

    def __init__(self,
                 id=None,
                 sequence=None,
                ):
        """
        :type  id: :class:`long` or ``None``
        :param id: ICMP id format: int64
        :type  sequence: :class:`long` or ``None``
        :param sequence: ICMP sequence number format: int64
        """
        self.id = id
        self.sequence = sequence
        VapiStruct.__init__(self)


IcmpEchoRequestHeader._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.icmp_echo_request_header', {
        'id': type.OptionalType(type.IntegerType()),
        'sequence': type.OptionalType(type.IntegerType()),
    },
    IcmpEchoRequestHeader,
    False,
    None))



class IcmpPolicyLbMonitorProfile(VapiStruct):
    """
    Active healthchecks are disabled by default and can be enabled for a server
    pool by binding a health monitor to the Group through the PolicyLbRule
    object. This represents active health monitoring over ICMP. Active
    healthchecks are initiated periodically, at a configurable interval, to
    each member of the Group. Only if a healthcheck fails consecutively for a
    specified number of times (fall_count) to a member will the member status
    be marked DOWN. Once a member is DOWN, a specified number of consecutive
    successful healt hchecks (rise_count) will bring the member back to UP
    state. After a healthcheck is initiated, if it does not complete within a
    certain period, then also the healthcheck is considered to be unsuccessful.
    Completing a healthcheck within timeout means establishing a connection
    (TCP or SSL), if applicable, sending the request and receiving the
    response, all within the configured timeout.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "IcmpPolicyLbMonitorProfile"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'fall_count': 'fall_count',
                            'interval': 'interval',
                            'monitor_port': 'monitor_port',
                            'rise_count': 'rise_count',
                            'timeout': 'timeout',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='IcmpPolicyLbMonitorProfile',
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 fall_count=None,
                 interval=None,
                 monitor_port=None,
                 rise_count=None,
                 timeout=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`PolicyLbMonitorProfile.RESOURCE_TYPE_TCPPOLICYLBMONITORPROFILE`
            *
              :attr:`PolicyLbMonitorProfile.RESOURCE_TYPE_UDPPOLICYLBMONITORPROFILE`
            *
              :attr:`PolicyLbMonitorProfile.RESOURCE_TYPE_ICMPPOLICYLBMONITORPROFILE`
            *
              :attr:`PolicyLbMonitorProfile.RESOURCE_TYPE_HTTPPOLICYLBMONITORPROFILE`
            *
              :attr:`PolicyLbMonitorProfile.RESOURCE_TYPE_HTTPSPOLICYLBMONITORPROFILE`
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  fall_count: :class:`long` or ``None``
        :param fall_count: Only if a healthcheck fails consecutively for a specified number of
            times, given with fall_count, to a member will the member status be
            marked DOWN. format: int64
        :type  interval: :class:`long` or ``None``
        :param interval: Active healthchecks are initiated periodically, at a configurable
            interval (in seconds), to each member of the Group. format: int64
        :type  monitor_port: :class:`long` or ``None``
        :param monitor_port: Typically, monitors perform healthchecks to Group members using the
            member IP address and pool_port. However, in some cases, customers
            prefer to run healthchecks against a different port than the pool
            member port which handles actual application traffic. In such
            cases, the port to run healthchecks against can be specified in the
            monitor_port value. format: int32
        :type  rise_count: :class:`long` or ``None``
        :param rise_count: Once a member is DOWN, a specified number of consecutive successful
            healthchecks specified by rise_count will bring the member back to
            UP state. format: int64
        :type  timeout: :class:`long` or ``None``
        :param timeout: Timeout specified in seconds. After a healthcheck is initiated, if
            it does not complete within a certain period, then also the
            healthcheck is considered to be unsuccessful. Completing a
            healthcheck within timeout means establishing a connection (TCP or
            SSL), if applicable, sending the request and receiving the
            response, all within the configured timeout. format: int64
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.fall_count = fall_count
        self.interval = interval
        self.monitor_port = monitor_port
        self.rise_count = rise_count
        self.timeout = timeout
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

IcmpPolicyLbMonitorProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.icmp_policy_lb_monitor_profile', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'fall_count': type.OptionalType(type.IntegerType()),
        'interval': type.OptionalType(type.IntegerType()),
        'monitor_port': type.OptionalType(type.IntegerType()),
        'rise_count': type.OptionalType(type.IntegerType()),
        'timeout': type.OptionalType(type.IntegerType()),
    },
    IcmpPolicyLbMonitorProfile,
    False,
    None))



class Icon(VapiStruct):
    """
    Icon to be applied at dashboard for widgets and UI elements.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    PLACEMENT_PRE = "PRE"
    """


    """
    PLACEMENT_POST = "POST"
    """


    """
    TYPE_ERROR = "ERROR"
    """


    """
    TYPE_WARNING = "WARNING"
    """


    """
    TYPE_INFO = "INFO"
    """


    """
    TYPE_INPROGRESS = "INPROGRESS"
    """


    """
    TYPE_SUCCESS = "SUCCESS"
    """


    """
    TYPE_DETAIL = "DETAIL"
    """


    """
    TYPE_NOT_AVAILABLE = "NOT_AVAILABLE"
    """


    """
    TYPE_SECURITY = "SECURITY"
    """


    """
    TYPE_NETWORKING = "NETWORKING"
    """


    """
    TYPE_LOAD_BALANCER = "LOAD_BALANCER"
    """


    """
    TYPE_VPN = "VPN"
    """


    """
    TYPE_DOMAIN = "DOMAIN"
    """


    """
    TYPE_GROUP = "GROUP"
    """


    """
    TYPE_DISTRIBUTED_FIREWALL = "DISTRIBUTED_FIREWALL"
    """


    """
    TYPE_NETWORKING_TIER0 = "NETWORKING_TIER0"
    """


    """
    TYPE_NETWORKING_TIER1 = "NETWORKING_TIER1"
    """


    """
    TYPE_SEGMENT = "SEGMENT"
    """


    """
    TYPE_SYSTEM = "SYSTEM"
    """


    """
    TYPE_SYSTEM_FABRIC = "SYSTEM_FABRIC"
    """


    """
    TYPE_SYSTEM_BACKUPRESTORE = "SYSTEM_BACKUPRESTORE"
    """


    """
    TYPE_INVENTORY_GROUPS = "INVENTORY_GROUPS"
    """


    """
    TYPE_SECURITY_DFW = "SECURITY_DFW"
    """


    """



    _canonical_to_pep_names = {
                            'placement': 'placement',
                            'tooltip': 'tooltip',
                            'type': 'type',
                            }

    def __init__(self,
                 placement=None,
                 tooltip=None,
                 type=None,
                ):
        """
        :type  placement: :class:`str` or ``None``
        :param placement: Possible values are: 
            
            * :attr:`Icon.PLACEMENT_PRE`
            * :attr:`Icon.PLACEMENT_POST`
            
            If specified as PRE, the icon appears before the UI element. If set
            as POST, the icon appears after the UI element.
        :type  tooltip: :class:`list` of :class:`Tooltip` or ``None``
        :param tooltip: Multi-line text to be shown on tooltip while hovering over the
            icon.
        :type  type: :class:`str` or ``None``
        :param type: Possible values are: 
            
            * :attr:`Icon.TYPE_ERROR`
            * :attr:`Icon.TYPE_WARNING`
            * :attr:`Icon.TYPE_INFO`
            * :attr:`Icon.TYPE_INPROGRESS`
            * :attr:`Icon.TYPE_SUCCESS`
            * :attr:`Icon.TYPE_DETAIL`
            * :attr:`Icon.TYPE_NOT_AVAILABLE`
            * :attr:`Icon.TYPE_SECURITY`
            * :attr:`Icon.TYPE_NETWORKING`
            * :attr:`Icon.TYPE_LOAD_BALANCER`
            * :attr:`Icon.TYPE_VPN`
            * :attr:`Icon.TYPE_DOMAIN`
            * :attr:`Icon.TYPE_GROUP`
            * :attr:`Icon.TYPE_DISTRIBUTED_FIREWALL`
            * :attr:`Icon.TYPE_NETWORKING_TIER0`
            * :attr:`Icon.TYPE_NETWORKING_TIER1`
            * :attr:`Icon.TYPE_SEGMENT`
            * :attr:`Icon.TYPE_SYSTEM`
            * :attr:`Icon.TYPE_SYSTEM_FABRIC`
            * :attr:`Icon.TYPE_SYSTEM_BACKUPRESTORE`
            * :attr:`Icon.TYPE_INVENTORY_GROUPS`
            * :attr:`Icon.TYPE_SECURITY_DFW`
            
            Icon will be rendered based on its type. For example, if ERROR is
            chosen, then icon representing error will be rendered.
        """
        self.placement = placement
        self.tooltip = tooltip
        self.type = type
        VapiStruct.__init__(self)


Icon._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.icon', {
        'placement': type.OptionalType(type.StringType()),
        'tooltip': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tooltip'))),
        'type': type.OptionalType(type.StringType()),
    },
    Icon,
    False,
    None))



class IdentityGroupExpression(VapiStruct):
    """
    Represents a list of identity group (Ad group SID) expressions.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "IdentityGroupExpression"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'identity_groups': 'identity_groups',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            }

    def __init__(self,
                 identity_groups=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='IdentityGroupExpression',
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                ):
        """
        :type  identity_groups: :class:`list` of :class:`IdentityGroupInfo` or ``None``
        :param identity_groups: This array consists of set of identity group object. All members
            within this array are implicitly OR'ed together.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`Expression.RESOURCE_TYPE_CONDITION`
            * :attr:`Expression.RESOURCE_TYPE_CONJUNCTIONOPERATOR`
            * :attr:`Expression.RESOURCE_TYPE_NESTEDEXPRESSION`
            * :attr:`Expression.RESOURCE_TYPE_IPADDRESSEXPRESSION`
            * :attr:`Expression.RESOURCE_TYPE_MACADDRESSEXPRESSION`
            * :attr:`Expression.RESOURCE_TYPE_EXTERNALIDEXPRESSION`
            * :attr:`Expression.RESOURCE_TYPE_PATHEXPRESSION`
            * :attr:`Expression.RESOURCE_TYPE_IDENTITYGROUPEXPRESSION`
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.identity_groups = identity_groups
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

IdentityGroupExpression._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.identity_group_expression', {
        'identity_groups': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'IdentityGroupInfo'))),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
    },
    IdentityGroupExpression,
    False,
    None))



class IdentityGroupInfo(VapiStruct):
    """
    Identity (Directory) group

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'distinguished_name': 'distinguished_name',
                            'domain_base_distinguished_name': 'domain_base_distinguished_name',
                            'sid': 'sid',
                            }

    def __init__(self,
                 distinguished_name=None,
                 domain_base_distinguished_name=None,
                 sid=None,
                ):
        """
        :type  distinguished_name: :class:`str` or ``None``
        :param distinguished_name: Each LDAP object is uniquely identified by its distinguished name
            (DN). A DN is a sequence of relative distinguished names (RDN)
            connected by commas. e.g. CN=Larry
            Cole,CN=admin,DC=corp,DC=acme,DC=com. A valid fully qualified
            distinguished name should be provided to include specific groups
            else the create / update realization of the Group containing an
            invalid/ partial DN will fail. This value is valid only if it
            matches to exactly 1 LDAP object on the LDAP server.
        :type  domain_base_distinguished_name: :class:`str` or ``None``
        :param domain_base_distinguished_name: This is the base distinguished name for the domain where this
            particular group resides. (e.g. dc=example,dc=com) Each active
            directory domain has a domain naming context (NC), which contains
            domain-specific data. The root of this naming context is
            represented by a domain's distinguished name (DN) and is typically
            referred to as the NC head.
        :type  sid: :class:`str` or ``None``
        :param sid: A security identifier (SID) is a unique value of variable length
            used to identify a trustee. A SID consists of the following
            components: The revision level of the SID structure; A 48-bit
            identifier authority value that identifies the authority that
            issued the SID; A variable number of subauthority or relative
            identifier (RID) values that uniquely identify the trustee relative
            to the authority that issued the SID. This field is only populated
            for Microsoft Active Directory identity store.
        """
        self.distinguished_name = distinguished_name
        self.domain_base_distinguished_name = domain_base_distinguished_name
        self.sid = sid
        VapiStruct.__init__(self)


IdentityGroupInfo._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.identity_group_info', {
        'distinguished_name': type.OptionalType(type.StringType()),
        'domain_base_distinguished_name': type.OptionalType(type.StringType()),
        'sid': type.OptionalType(type.StringType()),
    },
    IdentityGroupInfo,
    False,
    None))



class IdentitySourceLdapServer(VapiStruct):
    """
    Information about a single LDAP server.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'bind_identity': 'bind_identity',
                            'certificates': 'certificates',
                            'enabled': 'enabled',
                            'password': 'password',
                            'url': 'url',
                            'use_starttls': 'use_starttls',
                            }

    def __init__(self,
                 bind_identity=None,
                 certificates=None,
                 enabled=None,
                 password=None,
                 url=None,
                 use_starttls=None,
                ):
        """
        :type  bind_identity: :class:`str` or ``None``
        :param bind_identity: A username used to authenticate to the directory when admnistering
            roles in NSX. This user should have privileges to search the LDAP
            directory for groups and users. This user is also used in some
            cases (OpenLDAP) to look up an NSX user's distinguished name based
            on their NSX login name. If omitted, NSX will authenticate to the
            LDAP server using an LDAP anonymous bind operation. For Active
            Directory, provide a userPrincipalName (e.g.
            administrator\\\\@airius.com) or the full distinguished nane. For
            OpenLDAP, provide the distinguished name of the user (e.g.
            uid=admin, cn=airius, dc=com).
        :type  certificates: :class:`list` of :class:`str` or ``None``
        :param certificates: If using LDAPS or STARTTLS, provide the X.509 certificate of the
            LDAP server in PEM format. This property is not required when
            connecting without TLS encryption and is ignored in that case.
        :type  enabled: :class:`bool` or ``None``
        :param enabled: Allows the LDAP server to be enabled or disabled. When disabled,
            this LDAP server will not be used to authenticate users.
        :type  password: :class:`str` or ``None``
        :param password: A password used when authenticating to the directory.
        :type  url: :class:`str` or ``None``
        :param url: The URL for the LDAP server. Supported URL schemes are LDAP and
            LDAPS. Either a hostname or an IP address may be given, and the
            port number is optional and defaults to 389 for the LDAP scheme and
            636 for the LDAPS scheme.
        :type  use_starttls: :class:`bool` or ``None``
        :param use_starttls: If set to true, Use the StartTLS extended operation to upgrade the
            connection to TLS before sending any sensitive information. The
            LDAP server must support the StartTLS extended operation in order
            for this protocol to operate correctly. This option is ignored if
            the URL scheme is LDAPS.
        """
        self.bind_identity = bind_identity
        self.certificates = certificates
        self.enabled = enabled
        self.password = password
        self.url = url
        self.use_starttls = use_starttls
        VapiStruct.__init__(self)


IdentitySourceLdapServer._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.identity_source_ldap_server', {
        'bind_identity': type.OptionalType(type.StringType()),
        'certificates': type.OptionalType(type.ListType(type.StringType())),
        'enabled': type.OptionalType(type.BooleanType()),
        'password': type.OptionalType(type.StringType()),
        'url': type.OptionalType(type.StringType()),
        'use_starttls': type.OptionalType(type.BooleanType()),
    },
    IdentitySourceLdapServer,
    False,
    None))



class IdentitySourceLdapServerEndpoint(VapiStruct):
    """
    Information about a single LDAP server endpoint.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'url': 'url',
                            'use_starttls': 'use_starttls',
                            }

    def __init__(self,
                 url=None,
                 use_starttls=None,
                ):
        """
        :type  url: :class:`str` or ``None``
        :param url: The URL for the LDAP server. Supported URL schemes are LDAP and
            LDAPS. Either a hostname or an IP address may be given, and the
            port number is optional and defaults to 389 for the LDAP scheme and
            636 for the LDAPS scheme.
        :type  use_starttls: :class:`bool` or ``None``
        :param use_starttls: If set to true, Use the StartTLS extended operation to upgrade the
            connection to TLS before sending any sensitive information. The
            LDAP server must support the StartTLS extended operation in order
            for this protocol to operate correctly. This option is ignored if
            the URL scheme is LDAPS.
        """
        self.url = url
        self.use_starttls = use_starttls
        VapiStruct.__init__(self)


IdentitySourceLdapServerEndpoint._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.identity_source_ldap_server_endpoint', {
        'url': type.OptionalType(type.StringType()),
        'use_starttls': type.OptionalType(type.BooleanType()),
    },
    IdentitySourceLdapServerEndpoint,
    False,
    None))



class IdentitySourceLdapServerProbeResult(VapiStruct):
    """
    The results of probing an individual LDAP server.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    RESULT_SUCCESS = "SUCCESS"
    """


    """
    RESULT_FAILURE = "FAILURE"
    """


    """



    _canonical_to_pep_names = {
                            'errors': 'errors',
                            'result': 'result',
                            'url': 'url',
                            }

    def __init__(self,
                 errors=None,
                 result=None,
                 url=None,
                ):
        """
        :type  errors: :class:`list` of :class:`LdapProbeError` or ``None``
        :param errors: Detail about errors encountered during the probe.
        :type  result: :class:`str` or ``None``
        :param result: Possible values are: 
            
            * :attr:`IdentitySourceLdapServerProbeResult.RESULT_SUCCESS`
            * :attr:`IdentitySourceLdapServerProbeResult.RESULT_FAILURE`
            
            Overall result of the probe. If the probe was able to connect to
            the LDAP service, authenticate using the provided credentials, and
            perform searches of the configured user and group search bases
            without error, the result is SUCCESS. Otherwise, the result is
            FAILURE, and additional details may be found in the errors
            property.
        :type  url: :class:`str` or ``None``
        :param url: THe URL of the probed LDAP host.
        """
        self.errors = errors
        self.result = result
        self.url = url
        VapiStruct.__init__(self)


IdentitySourceLdapServerProbeResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.identity_source_ldap_server_probe_result', {
        'errors': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'LdapProbeError'))),
        'result': type.OptionalType(type.StringType()),
        'url': type.OptionalType(type.StringType()),
    },
    IdentitySourceLdapServerProbeResult,
    False,
    None))



class IdsClusterConfig(VapiStruct):
    """
    IDS configuration to enable/disable IDS on cluster level.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'cluster': 'cluster',
                            'ids_enabled': 'ids_enabled',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 cluster=None,
                 ids_enabled=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  cluster: :class:`PolicyResourceReference` or ``None``
        :param cluster: Contains policy resource reference object
        :type  ids_enabled: :class:`bool` or ``None``
        :param ids_enabled: If set to true, IDS is enabled on the respective cluster
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.cluster = cluster
        self.ids_enabled = ids_enabled
        VapiStruct.__init__(self)


IdsClusterConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ids_cluster_config', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'cluster': type.OptionalType(type.ReferenceType(__name__, 'PolicyResourceReference')),
        'ids_enabled': type.OptionalType(type.BooleanType()),
    },
    IdsClusterConfig,
    False,
    None))



class IdsClusterConfigListResult(VapiStruct):
    """
    Paged collection of IDS cluster configuration

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`IdsClusterConfig` or ``None``
        :param results: Cluster wise IDS configuration list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


IdsClusterConfigListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ids_cluster_config_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'IdsClusterConfig'))),
    },
    IdsClusterConfigListResult,
    False,
    None))



class IdsProfile(VapiStruct):
    """
    IDS Profile which contains the signatures and will be used in IDS rules.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'severities': 'severities',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 severities=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  severities: :class:`list` of :class:`IdsProfileSeverity` or ``None``
        :param severities: Represents the severities of signatures which are part of this
            profile.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.severities = severities
        VapiStruct.__init__(self)


IdsProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ids_profile', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'severities': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'IdsProfileSeverity'))),
    },
    IdsProfile,
    False,
    None))



class IdsProfileListResult(VapiStruct):
    """
    Paged collection of IDS profiles

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`IdsProfile` or ``None``
        :param results: IDS profile list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


IdsProfileListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ids_profile_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'IdsProfile'))),
    },
    IdsProfileListResult,
    False,
    None))



class IdsProfileSeverity(VapiStruct):
    """
    Intrusion Detection System Profile severity.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    SEVERITY_CRITICAL = "CRITICAL"
    """


    """
    SEVERITY_HIGH = "HIGH"
    """


    """
    SEVERITY_MEDIUM = "MEDIUM"
    """


    """
    SEVERITY_LOW = "LOW"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'ignore_signatures': 'ignore_signatures',
                            'severity': 'severity',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 ignore_signatures=None,
                 severity=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  ignore_signatures: :class:`list` of :class:`str` or ``None``
        :param ignore_signatures: Contains the id of signatures that will be ignored as part of the
            profile.
        :type  severity: :class:`str` or ``None``
        :param severity: Possible values are: 
            
            * :attr:`IdsProfileSeverity.SEVERITY_CRITICAL`
            * :attr:`IdsProfileSeverity.SEVERITY_HIGH`
            * :attr:`IdsProfileSeverity.SEVERITY_MEDIUM`
            * :attr:`IdsProfileSeverity.SEVERITY_LOW`
            
             Represents the severity of a profile.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.ignore_signatures = ignore_signatures
        self.severity = severity
        VapiStruct.__init__(self)


IdsProfileSeverity._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ids_profile_severity', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'ignore_signatures': type.OptionalType(type.ListType(type.StringType())),
        'severity': type.OptionalType(type.StringType()),
    },
    IdsProfileSeverity,
    False,
    None))



class IdsRule(VapiStruct):
    """
    Represents the Intrusion Detection System rule which indicates the action
    to be performed for the corresponding workload groups.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    DIRECTION_IN = "IN"
    """


    """
    DIRECTION_OUT = "OUT"
    """


    """
    DIRECTION_IN_OUT = "IN_OUT"
    """


    """
    IP_PROTOCOL_IPV4 = "IPV4"
    """


    """
    IP_PROTOCOL_IPV6 = "IPV6"
    """


    """
    IP_PROTOCOL_IPV4_IPV6 = "IPV4_IPV6"
    """


    """
    ACTION_DETECT = "DETECT"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'destination_groups': 'destination_groups',
                            'destinations_excluded': 'destinations_excluded',
                            'direction': 'direction',
                            'disabled': 'disabled',
                            'ip_protocol': 'ip_protocol',
                            'is_default': 'is_default',
                            'logged': 'logged',
                            'notes': 'notes',
                            'profiles': 'profiles',
                            'rule_id': 'rule_id',
                            'scope': 'scope',
                            'sequence_number': 'sequence_number',
                            'service_entries': 'service_entries',
                            'services': 'services',
                            'source_groups': 'source_groups',
                            'sources_excluded': 'sources_excluded',
                            'tag': 'tag',
                            'action': 'action',
                            'ids_profiles': 'ids_profiles',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 destination_groups=None,
                 destinations_excluded=None,
                 direction=None,
                 disabled=None,
                 ip_protocol=None,
                 is_default=None,
                 logged=None,
                 notes=None,
                 profiles=None,
                 rule_id=None,
                 scope=None,
                 sequence_number=None,
                 service_entries=None,
                 services=None,
                 source_groups=None,
                 sources_excluded=None,
                 tag=None,
                 action=None,
                 ids_profiles=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  destination_groups: :class:`list` of :class:`str` or ``None``
        :param destination_groups: We need paths as duplicate names may exist for groups under
            different domains. Along with paths we support IP Address of type
            IPv4 and IPv6. IP Address can be in one of the format(CIDR, IP
            Address, Range of IP Address). In order to specify all groups, use
            the constant \"ANY\". This is case insensitive. If \"ANY\" is used,
            it should be the ONLY element in the group array. Error will be
            thrown if ANY is used in conjunction with other values.
        :type  destinations_excluded: :class:`bool` or ``None``
        :param destinations_excluded: If set to true, the rule gets applied on all the groups that are
            NOT part of the destination groups. If false, the rule applies to
            the destination groups
        :type  direction: :class:`str` or ``None``
        :param direction: Possible values are: 
            
            * :attr:`IdsRule.DIRECTION_IN`
            * :attr:`IdsRule.DIRECTION_OUT`
            * :attr:`IdsRule.DIRECTION_IN_OUT`
            
             Define direction of traffic.
        :type  disabled: :class:`bool` or ``None``
        :param disabled: Flag to disable the rule. Default is enabled.
        :type  ip_protocol: :class:`str` or ``None``
        :param ip_protocol: Possible values are: 
            
            * :attr:`IdsRule.IP_PROTOCOL_IPV4`
            * :attr:`IdsRule.IP_PROTOCOL_IPV6`
            * :attr:`IdsRule.IP_PROTOCOL_IPV4_IPV6`
            
            Type of IP packet that should be matched while enforcing the rule.
            The value is set to IPV4_IPV6 for Layer3 rule if not specified. For
            Layer2/Ether rule the value must be null.
        :type  is_default: :class:`bool` or ``None``
        :param is_default: A flag to indicate whether rule is a default rule.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  logged: :class:`bool` or ``None``
        :param logged: Flag to enable packet logging. Default is disabled.
        :type  notes: :class:`str` or ``None``
        :param notes: Text for additional notes on changes.
        :type  profiles: :class:`list` of :class:`str` or ``None``
        :param profiles: Holds the list of layer 7 service profile paths. These profiles
            accept attributes and sub-attributes of various network services
            (e.g. L4 AppId, encryption algorithm, domain name, etc) as key
            value pairs.
        :type  rule_id: :class:`long` or ``None``
        :param rule_id: This is a unique 4 byte positive number that is assigned by the
            system. This rule id is passed all the way down to the data path.
            The first 1GB (1000 to 2^30) will be shared by GM and LM with zebra
            style striped number space. For E.g 1000 to (1Million -1) by LM,
            (1M - 2M-1) by GM and so on. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  scope: :class:`list` of :class:`str` or ``None``
        :param scope: The list of policy paths where the rule is applied
            LR/Edge/T0/T1/LRP etc. Note that a given rule can be applied on
            multiple LRs/LRPs.
        :type  sequence_number: :class:`long` or ``None``
        :param sequence_number: This field is used to resolve conflicts between multiple Rules
            under Security or Gateway Policy for a Domain If no sequence number
            is specified in the payload, a value of 0 is assigned by default.
            If there are multiple rules with the same sequence number then
            their order is not deterministic. If a specific order of rules is
            desired, then one has to specify unique sequence numbers or use the
            POST request on the rule entity with a query parameter
            action=revise to let the framework assign a sequence number format:
            int32
        :type  service_entries: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param service_entries: In order to specify raw services this can be used, along with
            services which contains path to services. This can be empty or
            null.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ServiceEntry`. When methods return a value of this class as
            a return value, the attribute will contain all the attributes
            defined in :class:`ServiceEntry`.
        :type  services: :class:`list` of :class:`str` or ``None``
        :param services: In order to specify all services, use the constant \"ANY\". This is
            case insensitive. If \"ANY\" is used, it should be the ONLY element
            in the services array. Error will be thrown if ANY is used in
            conjunction with other values.
        :type  source_groups: :class:`list` of :class:`str` or ``None``
        :param source_groups: We need paths as duplicate names may exist for groups under
            different domains. Along with paths we support IP Address of type
            IPv4 and IPv6. IP Address can be in one of the format(CIDR, IP
            Address, Range of IP Address). In order to specify all groups, use
            the constant \"ANY\". This is case insensitive. If \"ANY\" is used,
            it should be the ONLY element in the group array. Error will be
            thrown if ANY is used in conjunction with other values.
        :type  sources_excluded: :class:`bool` or ``None``
        :param sources_excluded: If set to true, the rule gets applied on all the groups that are
            NOT part of the source groups. If false, the rule applies to the
            source groups
        :type  tag: :class:`str` or ``None``
        :param tag: User level field which will be printed in CLI and packet logs.
        :type  action: :class:`str` or ``None``
        :param action: Possible values are: 
            
            * :attr:`IdsRule.ACTION_DETECT`
            
             The action to be applied.
        :type  ids_profiles: :class:`list` of :class:`str` or ``None``
        :param ids_profiles: collections of IDS profiles.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.destination_groups = destination_groups
        self.destinations_excluded = destinations_excluded
        self.direction = direction
        self.disabled = disabled
        self.ip_protocol = ip_protocol
        self.is_default = is_default
        self.logged = logged
        self.notes = notes
        self.profiles = profiles
        self.rule_id = rule_id
        self.scope = scope
        self.sequence_number = sequence_number
        self.service_entries = service_entries
        self.services = services
        self.source_groups = source_groups
        self.sources_excluded = sources_excluded
        self.tag = tag
        self.action = action
        self.ids_profiles = ids_profiles
        VapiStruct.__init__(self)


IdsRule._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ids_rule', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'destination_groups': type.OptionalType(type.ListType(type.StringType())),
        'destinations_excluded': type.OptionalType(type.BooleanType()),
        'direction': type.OptionalType(type.StringType()),
        'disabled': type.OptionalType(type.BooleanType()),
        'ip_protocol': type.OptionalType(type.StringType()),
        'is_default': type.OptionalType(type.BooleanType()),
        'logged': type.OptionalType(type.BooleanType()),
        'notes': type.OptionalType(type.StringType()),
        'profiles': type.OptionalType(type.ListType(type.StringType())),
        'rule_id': type.OptionalType(type.IntegerType()),
        'scope': type.OptionalType(type.ListType(type.StringType())),
        'sequence_number': type.OptionalType(type.IntegerType()),
        'service_entries': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ServiceEntry')]))),
        'services': type.OptionalType(type.ListType(type.StringType())),
        'source_groups': type.OptionalType(type.ListType(type.StringType())),
        'sources_excluded': type.OptionalType(type.BooleanType()),
        'tag': type.OptionalType(type.StringType()),
        'action': type.OptionalType(type.StringType()),
        'ids_profiles': type.OptionalType(type.ListType(type.StringType())),
    },
    IdsRule,
    False,
    None))



class IdsRuleListResult(VapiStruct):
    """
    Paged collection of IDS rules

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`IdsRule` or ``None``
        :param results: IDS rule list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


IdsRuleListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ids_rule_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'IdsRule'))),
    },
    IdsRuleListResult,
    False,
    None))



class IdsSecurityPolicy(VapiStruct):
    """
    Represents the Intrusion Detection System Security Policy, which contains
    the list of IDS Rules.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'category': 'category',
                            'comments': 'comments',
                            'internal_sequence_number': 'internal_sequence_number',
                            'is_default': 'is_default',
                            'lock_modified_by': 'lock_modified_by',
                            'lock_modified_time': 'lock_modified_time',
                            'locked': 'locked',
                            'rule_count': 'rule_count',
                            'scheduler_path': 'scheduler_path',
                            'scope': 'scope',
                            'sequence_number': 'sequence_number',
                            'stateful': 'stateful',
                            'tcp_strict': 'tcp_strict',
                            'rules': 'rules',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 category=None,
                 comments=None,
                 internal_sequence_number=None,
                 is_default=None,
                 lock_modified_by=None,
                 lock_modified_time=None,
                 locked=None,
                 rule_count=None,
                 scheduler_path=None,
                 scope=None,
                 sequence_number=None,
                 stateful=None,
                 tcp_strict=None,
                 rules=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  category: :class:`str` or ``None``
        :param category: - Distributed Firewall - Policy framework provides five pre-defined
            categories for classifying a security policy. They are
            \"Ethernet\",\"Emergency\", \"Infrastructure\" \"Environment\" and
            \"Application\". There is a pre-determined order in which the
            policy framework manages the priority of these security policies.
            Ethernet category is for supporting layer 2 firewall rules. The
            other four categories are applicable for layer 3 rules. Amongst
            them, the Emergency category has the highest priority followed by
            Infrastructure, Environment and then Application rules.
            Administrator can choose to categorize a security policy into the
            above categories or can choose to leave it empty. If empty it will
            have the least precedence w.r.t the above four categories. - Edge
            Firewall - Policy Framework for Edge Firewall provides six
            pre-defined categories \"Emergency\", \"SystemRules\",
            \"SharedPreRules\", \"LocalGatewayRules\", \"AutoServiceRules\" and
            \"Default\", in order of priority of rules. All categories are
            allowed for Gatetway Policies that belong to 'default' Domain.
            However, for user created domains, category is restricted to
            \"SharedPreRules\" or \"LocalGatewayRules\" only. Also, the users
            can add/modify/delete rules from only the \"SharedPreRules\" and
            \"LocalGatewayRules\" categories. If user doesn't specify the
            category then defaulted to \"Rules\". System generated category is
            used by NSX created rules, for example BFD rules. Autoplumbed
            category used by NSX verticals to autoplumb data path rules.
            Finally, \"Default\" category is the placeholder default rules with
            lowest in the order of priority.
        :type  comments: :class:`str` or ``None``
        :param comments: Comments for security policy lock/unlock.
        :type  internal_sequence_number: :class:`long` or ``None``
        :param internal_sequence_number: This field is to indicate the internal sequence number of a policy
            with respect to the policies across categories. format: int32
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  is_default: :class:`bool` or ``None``
        :param is_default: A flag to indicate whether policy is a default policy.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  lock_modified_by: :class:`str` or ``None``
        :param lock_modified_by: ID of the user who last modified the lock for the secruity policy.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  lock_modified_time: :class:`long` or ``None``
        :param lock_modified_time: SecurityPolicy locked/unlocked time in epoch milliseconds. format:
            int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  locked: :class:`bool` or ``None``
        :param locked: Indicates whether a security policy should be locked. If the
            security policy is locked by a user, then no other user would be
            able to modify this security policy. Once the user releases the
            lock, other users can update this security policy.
        :type  rule_count: :class:`long` or ``None``
        :param rule_count: The count of rules in the policy. format: int32
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  scheduler_path: :class:`str` or ``None``
        :param scheduler_path: Provides a mechanism to apply the rules in this policy for a
            specified time duration.
        :type  scope: :class:`list` of :class:`str` or ``None``
        :param scope: The list of group paths where the rules in this policy will get
            applied. This scope will take precedence over rule level scope.
            Supported only for security and redirection policies. In case of
            RedirectionPolicy, it is expected only when the policy is NS and
            redirecting to service chain.
        :type  sequence_number: :class:`long` or ``None``
        :param sequence_number: This field is used to resolve conflicts between security policies
            across domains. In order to change the sequence number of a policy
            one can fire a POST request on the policy entity with a query
            parameter action=revise The sequence number field will reflect the
            value of the computed sequence number upon execution of the above
            mentioned POST request. For scenarios where the administrator is
            using a template to update several security policies, the only way
            to set the sequence number is to explicitly specify the sequence
            number for each security policy. If no sequence number is specified
            in the payload, a value of 0 is assigned by default. If there are
            multiple policies with the same sequence number then their order is
            not deterministic. If a specific order of policies is desired, then
            one has to specify unique sequence numbers or use the POST request
            on the policy entity with a query parameter action=revise to let
            the framework assign a sequence number format: int32
        :type  stateful: :class:`bool` or ``None``
        :param stateful: Stateful or Stateless nature of security policy is enforced on all
            rules in this security policy. When it is stateful, the state of
            the network connects are tracked and a stateful packet inspection
            is performed. Layer3 security policies can be stateful or
            stateless. By default, they are stateful. Layer2 security policies
            can only be stateless.
        :type  tcp_strict: :class:`bool` or ``None``
        :param tcp_strict: Ensures that a 3 way TCP handshake is done before the data packets
            are sent. tcp_strict=true is supported only for stateful security
            policies. If the tcp_strict flag is not specified and the security
            policy is stateful, then tcp_strict will be set to true.
        :type  rules: :class:`list` of :class:`IdsRule` or ``None``
        :param rules: IDS Rules that are a part of this SecurityPolicy
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.category = category
        self.comments = comments
        self.internal_sequence_number = internal_sequence_number
        self.is_default = is_default
        self.lock_modified_by = lock_modified_by
        self.lock_modified_time = lock_modified_time
        self.locked = locked
        self.rule_count = rule_count
        self.scheduler_path = scheduler_path
        self.scope = scope
        self.sequence_number = sequence_number
        self.stateful = stateful
        self.tcp_strict = tcp_strict
        self.rules = rules
        VapiStruct.__init__(self)


IdsSecurityPolicy._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ids_security_policy', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'category': type.OptionalType(type.StringType()),
        'comments': type.OptionalType(type.StringType()),
        'internal_sequence_number': type.OptionalType(type.IntegerType()),
        'is_default': type.OptionalType(type.BooleanType()),
        'lock_modified_by': type.OptionalType(type.StringType()),
        'lock_modified_time': type.OptionalType(type.IntegerType()),
        'locked': type.OptionalType(type.BooleanType()),
        'rule_count': type.OptionalType(type.IntegerType()),
        'scheduler_path': type.OptionalType(type.StringType()),
        'scope': type.OptionalType(type.ListType(type.StringType())),
        'sequence_number': type.OptionalType(type.IntegerType()),
        'stateful': type.OptionalType(type.BooleanType()),
        'tcp_strict': type.OptionalType(type.BooleanType()),
        'rules': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'IdsRule'))),
    },
    IdsSecurityPolicy,
    False,
    None))



class IdsSecurityPolicyListResult(VapiStruct):
    """
    Paged collection of IDS security policies

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`IdsSecurityPolicy` or ``None``
        :param results: IDS security policy list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


IdsSecurityPolicyListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ids_security_policy_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'IdsSecurityPolicy'))),
    },
    IdsSecurityPolicyListResult,
    False,
    None))



class IdsSettings(VapiStruct):
    """
    Represents the Intrusion Detection System settings.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'auto_update': 'auto_update',
                            'ids_ever_enabled': 'ids_ever_enabled',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 auto_update=None,
                 ids_ever_enabled=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  auto_update: :class:`bool` or ``None``
        :param auto_update: Parameter to let the user decide whether to update the IDS
            Signatures automatically or not.
        :type  ids_ever_enabled: :class:`bool` or ``None``
        :param ids_ever_enabled: Flag which tells whether IDS was ever enabled.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.auto_update = auto_update
        self.ids_ever_enabled = ids_ever_enabled
        VapiStruct.__init__(self)


IdsSettings._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ids_settings', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'auto_update': type.OptionalType(type.BooleanType()),
        'ids_ever_enabled': type.OptionalType(type.BooleanType()),
    },
    IdsSettings,
    False,
    None))



class IdsSignature(VapiStruct):
    """
    Intrusion Detection System Signature .

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    CATEGORIES_APPLICATION = "APPLICATION"
    """


    """
    CATEGORIES_MALWARE = "MALWARE"
    """


    """
    CATEGORIES_VULNERABILITY = "VULNERABILITY"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'attack_target': 'attack_target',
                            'categories': 'categories',
                            'class_type': 'class_type',
                            'cves': 'cves',
                            'cvssv2': 'cvssv2',
                            'cvssv3': 'cvssv3',
                            'flow': 'flow',
                            'name': 'name',
                            'product_affected': 'product_affected',
                            'severity': 'severity',
                            'signature_id': 'signature_id',
                            'signature_revision': 'signature_revision',
                            'urls': 'urls',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 attack_target=None,
                 categories=None,
                 class_type=None,
                 cves=None,
                 cvssv2=None,
                 cvssv3=None,
                 flow=None,
                 name=None,
                 product_affected=None,
                 severity=None,
                 signature_id=None,
                 signature_revision=None,
                 urls=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  attack_target: :class:`str` or ``None``
        :param attack_target: Target of the signature.
        :type  categories: :class:`list` of :class:`str` or ``None``
        :param categories: Possible values are: 
            
            * :attr:`IdsSignature.CATEGORIES_APPLICATION`
            * :attr:`IdsSignature.CATEGORIES_MALWARE`
            * :attr:`IdsSignature.CATEGORIES_VULNERABILITY`
            
             Represents the internal categories a signature belongs to.
        :type  class_type: :class:`str` or ``None``
        :param class_type: Class type of Signature.
        :type  cves: :class:`list` of :class:`str` or ``None``
        :param cves: CVE score
        :type  cvssv2: :class:`str` or ``None``
        :param cvssv2: Signature cvssv2 score.
        :type  cvssv3: :class:`str` or ``None``
        :param cvssv3: Signature cvssv3 score.
        :type  flow: :class:`str` or ``None``
        :param flow: Flow established from server, from client etc.
        :type  name: :class:`str` or ``None``
        :param name: Signature name.
        :type  product_affected: :class:`str` or ``None``
        :param product_affected: Product affected by this signature.
        :type  severity: :class:`str` or ``None``
        :param severity: Represents the severity of the Signature.
        :type  signature_id: :class:`str` or ``None``
        :param signature_id: Represents the Signature's id.
        :type  signature_revision: :class:`str` or ``None``
        :param signature_revision: Represents revision of the Signature.
        :type  urls: :class:`list` of :class:`str` or ``None``
        :param urls: List of mitre attack URLs pertaining to signature
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.attack_target = attack_target
        self.categories = categories
        self.class_type = class_type
        self.cves = cves
        self.cvssv2 = cvssv2
        self.cvssv3 = cvssv3
        self.flow = flow
        self.name = name
        self.product_affected = product_affected
        self.severity = severity
        self.signature_id = signature_id
        self.signature_revision = signature_revision
        self.urls = urls
        VapiStruct.__init__(self)


IdsSignature._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ids_signature', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'attack_target': type.OptionalType(type.StringType()),
        'categories': type.OptionalType(type.ListType(type.StringType())),
        'class_type': type.OptionalType(type.StringType()),
        'cves': type.OptionalType(type.ListType(type.StringType())),
        'cvssv2': type.OptionalType(type.StringType()),
        'cvssv3': type.OptionalType(type.StringType()),
        'flow': type.OptionalType(type.StringType()),
        'name': type.OptionalType(type.StringType()),
        'product_affected': type.OptionalType(type.StringType()),
        'severity': type.OptionalType(type.StringType()),
        'signature_id': type.OptionalType(type.StringType()),
        'signature_revision': type.OptionalType(type.StringType()),
        'urls': type.OptionalType(type.ListType(type.StringType())),
    },
    IdsSignature,
    False,
    None))



class IdsSignatureListResult(VapiStruct):
    """
    Paged collection of IDS signatures

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`IdsSignature` or ``None``
        :param results: IDS signature list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


IdsSignatureListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ids_signature_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'IdsSignature'))),
    },
    IdsSignatureListResult,
    False,
    None))



class IdsSignatureStatus(VapiStruct):
    """
    Ids signature status.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    DOWNLOAD_STATUS_READY = "READY"
    """


    """
    DOWNLOAD_STATUS_PENDING = "PENDING"
    """


    """
    DOWNLOAD_STATUS_ERROR = "ERROR"
    """


    """
    DOWNLOAD_STATUS_DISABLED = "DISABLED"
    """


    """
    SIGNATURE_STATUS_AVAILABLE = "AVAILABLE"
    """


    """
    SIGNATURE_STATUS_UNAVAILABLE = "UNAVAILABLE"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'download_status': 'download_status',
                            'signature_status': 'signature_status',
                            'version_id': 'version_id',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 download_status=None,
                 signature_status=None,
                 version_id=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  download_status: :class:`str` or ``None``
        :param download_status: Possible values are: 
            
            * :attr:`IdsSignatureStatus.DOWNLOAD_STATUS_READY`
            * :attr:`IdsSignatureStatus.DOWNLOAD_STATUS_PENDING`
            * :attr:`IdsSignatureStatus.DOWNLOAD_STATUS_ERROR`
            * :attr:`IdsSignatureStatus.DOWNLOAD_STATUS_DISABLED`
            
            READY means signatures were downloaded and parsed successfully.
            PENDING means that signatures download is in progress. ERROR means
            error occurred during signature processing. DISABLED means IDS is
            disabled.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  signature_status: :class:`str` or ``None``
        :param signature_status: Possible values are: 
            
            * :attr:`IdsSignatureStatus.SIGNATURE_STATUS_AVAILABLE`
            * :attr:`IdsSignatureStatus.SIGNATURE_STATUS_UNAVAILABLE`
            
            AVAILABLE means the signatures are available for the version.
            UNAVAILABLE means there are no available signatures for the
            version.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  version_id: :class:`str` or ``None``
        :param version_id: Represents the version id.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.download_status = download_status
        self.signature_status = signature_status
        self.version_id = version_id
        VapiStruct.__init__(self)


IdsSignatureStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ids_signature_status', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'download_status': type.OptionalType(type.StringType()),
        'signature_status': type.OptionalType(type.StringType()),
        'version_id': type.OptionalType(type.StringType()),
    },
    IdsSignatureStatus,
    False,
    None))



class IdsSignatureVersion(VapiStruct):
    """
    It represents the version information corresponding to which the signatures
    will be available.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    STATE_ACTIVE = "ACTIVE"
    """


    """
    STATE_NOTACTIVE = "NOTACTIVE"
    """


    """
    STATUS_OUTDATED = "OUTDATED"
    """


    """
    STATUS_LATEST = "LATEST"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'change_log': 'change_log',
                            'state': 'state',
                            'status': 'status',
                            'update_time': 'update_time',
                            'user_uploaded': 'user_uploaded',
                            'version_id': 'version_id',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 change_log=None,
                 state=None,
                 status=None,
                 update_time=None,
                 user_uploaded=None,
                 version_id=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  change_log: :class:`str` or ``None``
        :param change_log: Represents the version's change log.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  state: :class:`str` or ``None``
        :param state: Possible values are: 
            
            * :attr:`IdsSignatureVersion.STATE_ACTIVE`
            * :attr:`IdsSignatureVersion.STATE_NOTACTIVE`
            
            This flag tells which Version is currently active. ACTIVE: It means
            the signatures under this version is currently been used under IDS
            Profiles. NOTACTIVE: It means signatures of this version are
            available but not being used in IDS Profiles.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  status: :class:`str` or ``None``
        :param status: Possible values are: 
            
            * :attr:`IdsSignatureVersion.STATUS_OUTDATED`
            * :attr:`IdsSignatureVersion.STATUS_LATEST`
            
            This flag tells the status of the signatures under a version.
            OUTDATED: It means the signatures under this version are outdated
            and new version is available. LATEST: It means the signatures of
            this version are up to date.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  update_time: :class:`long` or ``None``
        :param update_time: Time when this version was downloaded and saved. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  user_uploaded: :class:`bool` or ``None``
        :param user_uploaded: Flag which tells whether te SIgnature version is uploaded by user
            or not.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  version_id: :class:`str` or ``None``
        :param version_id: Represents the version id.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.change_log = change_log
        self.state = state
        self.status = status
        self.update_time = update_time
        self.user_uploaded = user_uploaded
        self.version_id = version_id
        VapiStruct.__init__(self)


IdsSignatureVersion._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ids_signature_version', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'change_log': type.OptionalType(type.StringType()),
        'state': type.OptionalType(type.StringType()),
        'status': type.OptionalType(type.StringType()),
        'update_time': type.OptionalType(type.IntegerType()),
        'user_uploaded': type.OptionalType(type.BooleanType()),
        'version_id': type.OptionalType(type.StringType()),
    },
    IdsSignatureVersion,
    False,
    None))



class IdsSignatureVersionListResult(VapiStruct):
    """
    Paged collection of IDS signature versions

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`IdsSignatureVersion` or ``None``
        :param results: IDS signature version list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


IdsSignatureVersionListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ids_signature_version_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'IdsSignatureVersion'))),
    },
    IdsSignatureVersionListResult,
    False,
    None))



class IdsStandaloneHostConfig(VapiStruct):
    """
    IDS configuration to enable/disable IDS on standalone host level.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'ids_enabled': 'ids_enabled',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 ids_enabled=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  ids_enabled: :class:`bool` or ``None``
        :param ids_enabled: If set to true, IDS is enabled on standalone hosts.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.ids_enabled = ids_enabled
        VapiStruct.__init__(self)


IdsStandaloneHostConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ids_standalone_host_config', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'ids_enabled': type.OptionalType(type.BooleanType()),
    },
    IdsStandaloneHostConfig,
    False,
    None))



class IgmpMembership(VapiStruct):
    """
    IGMP (Internet Group Management Protocol) membership details.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'group': 'group',
                            'igmp_version': 'igmp_version',
                            'interface': '_interface',
                            'no_of_sources': 'no_of_sources',
                            'source_address': 'source_address',
                            'uptime': 'uptime',
                            }

    def __init__(self,
                 group=None,
                 igmp_version=None,
                 _interface=None,
                 no_of_sources=None,
                 source_address=None,
                 uptime=None,
                ):
        """
        :type  group: :class:`str` or ``None``
        :param group: Multicast group address. format: ip
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  igmp_version: :class:`long` or ``None``
        :param igmp_version: IGMP version. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  _interface: :class:`str` or ``None``
        :param _interface: Interface on which multicast group membership is learned.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  no_of_sources: :class:`str` or ``None``
        :param no_of_sources: Number of multicast sources.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  source_address: :class:`str` or ``None``
        :param source_address: IP address of multicast source. format: ip
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  uptime: :class:`str` or ``None``
        :param uptime: Multicast group membership active time.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.group = group
        self.igmp_version = igmp_version
        self._interface = _interface
        self.no_of_sources = no_of_sources
        self.source_address = source_address
        self.uptime = uptime
        VapiStruct.__init__(self)


IgmpMembership._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.igmp_membership', {
        'group': type.OptionalType(type.StringType()),
        'igmp_version': type.OptionalType(type.IntegerType()),
        'interface': type.OptionalType(type.StringType()),
        'no_of_sources': type.OptionalType(type.StringType()),
        'source_address': type.OptionalType(type.StringType()),
        'uptime': type.OptionalType(type.StringType()),
    },
    IgmpMembership,
    False,
    None))



class IgmpMembershipCsvRecord(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'group': 'group',
                            'igmp_version': 'igmp_version',
                            'interface': '_interface',
                            'no_of_sources': 'no_of_sources',
                            'source_address': 'source_address',
                            'transport_node': 'transport_node',
                            'uptime': 'uptime',
                            }

    def __init__(self,
                 group=None,
                 igmp_version=None,
                 _interface=None,
                 no_of_sources=None,
                 source_address=None,
                 transport_node=None,
                 uptime=None,
                ):
        """
        :type  group: :class:`str` or ``None``
        :param group: Multicast group address. format: ip
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  igmp_version: :class:`long` or ``None``
        :param igmp_version: IGMP version. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  _interface: :class:`str` or ``None``
        :param _interface: Interface on which multicast group membership is learned.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  no_of_sources: :class:`str` or ``None``
        :param no_of_sources: Number of multicast sources.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  source_address: :class:`str` or ``None``
        :param source_address: IP address of multicast source. format: ip
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  transport_node: :class:`str` or ``None``
        :param transport_node: Transport node uuid or policy path.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  uptime: :class:`str` or ``None``
        :param uptime: Multicast group membership active time.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.group = group
        self.igmp_version = igmp_version
        self._interface = _interface
        self.no_of_sources = no_of_sources
        self.source_address = source_address
        self.transport_node = transport_node
        self.uptime = uptime
        VapiStruct.__init__(self)


IgmpMembershipCsvRecord._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.igmp_membership_csv_record', {
        'group': type.OptionalType(type.StringType()),
        'igmp_version': type.OptionalType(type.IntegerType()),
        'interface': type.OptionalType(type.StringType()),
        'no_of_sources': type.OptionalType(type.StringType()),
        'source_address': type.OptionalType(type.StringType()),
        'transport_node': type.OptionalType(type.StringType()),
        'uptime': type.OptionalType(type.StringType()),
    },
    IgmpMembershipCsvRecord,
    False,
    None))



class IgmpMemberships(VapiStruct):
    """
    IGMP Memberships.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'gateway_path': 'gateway_path',
                            'igmp_memberships_per_edge': 'igmp_memberships_per_edge',
                            }

    def __init__(self,
                 gateway_path=None,
                 igmp_memberships_per_edge=None,
                ):
        """
        :type  gateway_path: :class:`str` or ``None``
        :param gateway_path: Policy path to Tier0 gateway.
        :type  igmp_memberships_per_edge: :class:`list` of :class:`IgmpMembershipsPerEdge` or ``None``
        :param igmp_memberships_per_edge: 
        """
        self.gateway_path = gateway_path
        self.igmp_memberships_per_edge = igmp_memberships_per_edge
        VapiStruct.__init__(self)


IgmpMemberships._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.igmp_memberships', {
        'gateway_path': type.OptionalType(type.StringType()),
        'igmp_memberships_per_edge': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'IgmpMembershipsPerEdge'))),
    },
    IgmpMemberships,
    False,
    None))



class IgmpMembershipsInCsvFormat(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'file_name': 'file_name',
                            'results': 'results',
                            }

    def __init__(self,
                 file_name=None,
                 results=None,
                ):
        """
        :type  file_name: :class:`str` or ``None``
        :param file_name: File name set by HTTP server if API returns CSV result as a file.
        :type  results: :class:`list` of :class:`IgmpMembershipCsvRecord` or ``None``
        :param results: 
        """
        self.file_name = file_name
        self.results = results
        VapiStruct.__init__(self)


IgmpMembershipsInCsvFormat._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.igmp_memberships_in_csv_format', {
        'file_name': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'IgmpMembershipCsvRecord'))),
    },
    IgmpMembershipsInCsvFormat,
    False,
    None))



class IgmpMembershipsPerEdge(VapiStruct):
    """
    IGMP Memberships Per Edge.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'edge_path': 'edge_path',
                            'igmp_memberships': 'igmp_memberships',
                            }

    def __init__(self,
                 edge_path=None,
                 igmp_memberships=None,
                ):
        """
        :type  edge_path: :class:`str` or ``None``
        :param edge_path: Policy path to edge node.
        :type  igmp_memberships: :class:`list` of :class:`IgmpMembership` or ``None``
        :param igmp_memberships: 
        """
        self.edge_path = edge_path
        self.igmp_memberships = igmp_memberships
        VapiStruct.__init__(self)


IgmpMembershipsPerEdge._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.igmp_memberships_per_edge', {
        'edge_path': type.OptionalType(type.StringType()),
        'igmp_memberships': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'IgmpMembership'))),
    },
    IgmpMembershipsPerEdge,
    False,
    None))



class IncludedFieldsParameters(VapiStruct):
    """
    A list of fields to include in query results

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'included_fields': 'included_fields',
                            }

    def __init__(self,
                 included_fields=None,
                ):
        """
        :type  included_fields: :class:`str` or ``None``
        :param included_fields: Comma separated list of fields that should be included in query
            result
        """
        self.included_fields = included_fields
        VapiStruct.__init__(self)


IncludedFieldsParameters._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.included_fields_parameters', {
        'included_fields': type.OptionalType(type.StringType()),
    },
    IncludedFieldsParameters,
    False,
    None))



class Infra(VapiStruct):
    """
    Infra space related policy.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    CONNECTIVITY_STRATEGY_WHITELIST = "WHITELIST"
    """


    """
    CONNECTIVITY_STRATEGY_BLACKLIST = "BLACKLIST"
    """


    """
    CONNECTIVITY_STRATEGY_WHITELIST_ENABLE_LOGGING = "WHITELIST_ENABLE_LOGGING"
    """


    """
    CONNECTIVITY_STRATEGY_BLACKLIST_ENABLE_LOGGING = "BLACKLIST_ENABLE_LOGGING"
    """


    """
    CONNECTIVITY_STRATEGY_NONE = "NONE"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'connectivity_strategy': 'connectivity_strategy',
                            'domains': 'domains',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 connectivity_strategy=None,
                 domains=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  connectivity_strategy: :class:`str` or ``None``
        :param connectivity_strategy: Possible values are: 
            
            * :attr:`Infra.CONNECTIVITY_STRATEGY_WHITELIST`
            * :attr:`Infra.CONNECTIVITY_STRATEGY_BLACKLIST`
            * :attr:`Infra.CONNECTIVITY_STRATEGY_WHITELIST_ENABLE_LOGGING`
            * :attr:`Infra.CONNECTIVITY_STRATEGY_BLACKLIST_ENABLE_LOGGING`
            * :attr:`Infra.CONNECTIVITY_STRATEGY_NONE`
            
            The connectivity strategy is deprecated. Use default layer3 rule,
            /infra/domains/default/security-policies/default-layer3-security-policy/rules/default-layer3-rule.
            This field indicates the default connectivity policy for the infra
            or tenant space WHITELIST - Adds a default drop rule. Administrator
            can then use \"allow\" rules (aka whitelist) to allow traffic
            between groups BLACKLIST - Adds a default allow rule. Admin can
            then use \"drop\" rules (aka blacklist) to block traffic between
            groups WHITELIST_ENABLE_LOGGING - Whitelising with logging enabled
            BLACKLIST_ENABLE_LOGGING - Blacklisting with logging enabled NONE -
            No default rules are added.
        :type  domains: :class:`list` of :class:`Domain` or ``None``
        :param domains: This field is used while creating or updating the infra space.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.connectivity_strategy = connectivity_strategy
        self.domains = domains
        VapiStruct.__init__(self)


Infra._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.infra', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'connectivity_strategy': type.OptionalType(type.StringType()),
        'domains': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Domain'))),
    },
    Infra,
    False,
    None))



class IngressBroadcastRateLimiter(VapiStruct):
    """
    A shaper that specifies ingress rate properties in kb/s

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "IngressBroadcastRateLimiter"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'average_bandwidth': 'average_bandwidth',
                            'burst_size': 'burst_size',
                            'peak_bandwidth': 'peak_bandwidth',
                            'enabled': 'enabled',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 average_bandwidth=None,
                 burst_size=None,
                 peak_bandwidth=None,
                 enabled=None,
                 resource_type='IngressBroadcastRateLimiter',
                ):
        """
        :type  average_bandwidth: :class:`long` or ``None``
        :param average_bandwidth: Average bandwidth in kb/s format: int32
        :type  burst_size: :class:`long` or ``None``
        :param burst_size: Burst size in bytes format: int32
        :type  peak_bandwidth: :class:`long` or ``None``
        :param peak_bandwidth: Peak bandwidth in kb/s format: int32
        :type  enabled: :class:`bool` or ``None``
        :param enabled: 
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`QosBaseRateLimiter.RESOURCE_TYPE_INGRESSRATELIMITER`
            *
              :attr:`QosBaseRateLimiter.RESOURCE_TYPE_INGRESSBROADCASTRATELIMITER`
            * :attr:`QosBaseRateLimiter.RESOURCE_TYPE_EGRESSRATELIMITER`
            
             Type rate limiter
        """
        self.average_bandwidth = average_bandwidth
        self.burst_size = burst_size
        self.peak_bandwidth = peak_bandwidth
        self.enabled = enabled
        self._resource_type = resource_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

IngressBroadcastRateLimiter._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ingress_broadcast_rate_limiter', {
        'average_bandwidth': type.OptionalType(type.IntegerType()),
        'burst_size': type.OptionalType(type.IntegerType()),
        'peak_bandwidth': type.OptionalType(type.IntegerType()),
        'enabled': type.OptionalType(type.BooleanType()),
        'resource_type': type.StringType(),
    },
    IngressBroadcastRateLimiter,
    False,
    None))



class IngressRateLimiter(VapiStruct):
    """
    A shaper that specifies ingress rate properties in Mb/s

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "IngressRateLimiter"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'average_bandwidth': 'average_bandwidth',
                            'burst_size': 'burst_size',
                            'peak_bandwidth': 'peak_bandwidth',
                            'enabled': 'enabled',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 average_bandwidth=None,
                 burst_size=None,
                 peak_bandwidth=None,
                 enabled=None,
                 resource_type='IngressRateLimiter',
                ):
        """
        :type  average_bandwidth: :class:`long` or ``None``
        :param average_bandwidth: You can use the average bandwidth to reduce network congestion.
            format: int32
        :type  burst_size: :class:`long` or ``None``
        :param burst_size: The burst duration is set in the burst size setting. format: int32
        :type  peak_bandwidth: :class:`long` or ``None``
        :param peak_bandwidth: The peak bandwidth rate is used to support burst traffic. format:
            int32
        :type  enabled: :class:`bool` or ``None``
        :param enabled: 
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`QosBaseRateLimiter.RESOURCE_TYPE_INGRESSRATELIMITER`
            *
              :attr:`QosBaseRateLimiter.RESOURCE_TYPE_INGRESSBROADCASTRATELIMITER`
            * :attr:`QosBaseRateLimiter.RESOURCE_TYPE_EGRESSRATELIMITER`
            
             Type rate limiter
        """
        self.average_bandwidth = average_bandwidth
        self.burst_size = burst_size
        self.peak_bandwidth = peak_bandwidth
        self.enabled = enabled
        self._resource_type = resource_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

IngressRateLimiter._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ingress_rate_limiter', {
        'average_bandwidth': type.OptionalType(type.IntegerType()),
        'burst_size': type.OptionalType(type.IntegerType()),
        'peak_bandwidth': type.OptionalType(type.IntegerType()),
        'enabled': type.OptionalType(type.BooleanType()),
        'resource_type': type.StringType(),
    },
    IngressRateLimiter,
    False,
    None))



class InitiateClusterRestoreRequest(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'ip_address': 'ip_address',
                            'node_id': 'node_id',
                            'timestamp': 'timestamp',
                            }

    def __init__(self,
                 ip_address=None,
                 node_id=None,
                 timestamp=None,
                ):
        """
        :type  ip_address: :class:`str` or ``None``
        :param ip_address: IP address or FQDN of the node from which the backup was taken
            format: hostname-or-ip
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  node_id: :class:`str` or ``None``
        :param node_id: Unique id of the backed-up configuration from which the appliance
            will be restored
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  timestamp: :class:`long` or ``None``
        :param timestamp: Timestamp of the backed-up configuration from which the appliance
            will be restored format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.ip_address = ip_address
        self.node_id = node_id
        self.timestamp = timestamp
        VapiStruct.__init__(self)


InitiateClusterRestoreRequest._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.initiate_cluster_restore_request', {
        'ip_address': type.OptionalType(type.StringType()),
        'node_id': type.OptionalType(type.StringType()),
        'timestamp': type.OptionalType(type.IntegerType()),
    },
    InitiateClusterRestoreRequest,
    False,
    None))



class Injection(VapiStruct):
    """
    Injection holding a key and a corresponding value.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'key': 'key',
                            'value': 'value',
                            }

    def __init__(self,
                 key=None,
                 value=None,
                ):
        """
        :type  key: :class:`str` or ``None``
        :param key: Injection key.
        :type  value: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param value: Injection value.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`InjectionValue`. When methods return a value of this class
            as a return value, the attribute will contain all the attributes
            defined in :class:`InjectionValue`.
        """
        self.key = key
        self.value = value
        VapiStruct.__init__(self)


Injection._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.injection', {
        'key': type.OptionalType(type.StringType()),
        'value': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'InjectionValue')])),
    },
    Injection,
    False,
    None))



class InjectionValue(VapiStruct):
    """
    Injection Value.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "InjectionValue"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    RESOURCE_TYPE_UNARYOPERATIONBASEDINJECTIONVALUE = "UnaryOperationBasedInjectionValue"
    """


    """



    _canonical_to_pep_names = {
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 resource_type='InjectionValue',
                ):
        """
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`InjectionValue.RESOURCE_TYPE_UNARYOPERATIONBASEDINJECTIONVALUE`
            
             Injection Value resource type.
        """
        self._resource_type = resource_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

InjectionValue._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.injection_value', {
        'resource_type': type.StringType(),
    },
    InjectionValue,
    False,
    None))



class InstanceRuntimeStatistic(VapiStruct):
    """
    Statistics for data NICs on an instance runtime

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'interface_statistics': 'interface_statistics',
                            'primary_runtime_stats': 'primary_runtime_stats',
                            'runtime_id': 'runtime_id',
                            'runtime_name': 'runtime_name',
                            }

    def __init__(self,
                 interface_statistics=None,
                 primary_runtime_stats=None,
                 runtime_id=None,
                 runtime_name=None,
                ):
        """
        :type  interface_statistics: :class:`list` of :class:`RuntimeInterfaceStatistics` or ``None``
        :param interface_statistics: List of statistics for all data NICs on a runtime.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  primary_runtime_stats: :class:`bool` or ``None``
        :param primary_runtime_stats: Specifies whether statistics are for primary runtime.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  runtime_id: :class:`str` or ``None``
        :param runtime_id: Id of the instance runtime
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  runtime_name: :class:`str` or ``None``
        :param runtime_name: Name of the instance runtime
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.interface_statistics = interface_statistics
        self.primary_runtime_stats = primary_runtime_stats
        self.runtime_id = runtime_id
        self.runtime_name = runtime_name
        VapiStruct.__init__(self)


InstanceRuntimeStatistic._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.instance_runtime_statistic', {
        'interface_statistics': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'RuntimeInterfaceStatistics'))),
        'primary_runtime_stats': type.OptionalType(type.BooleanType()),
        'runtime_id': type.OptionalType(type.StringType()),
        'runtime_name': type.OptionalType(type.StringType()),
    },
    InstanceRuntimeStatistic,
    False,
    None))



class InstructionInfo(VapiStruct):
    """
    Details of the instructions displayed during restore process

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'actions': 'actions',
                            'fields': 'fields',
                            'id': 'id',
                            'name': 'name',
                            }

    def __init__(self,
                 actions=None,
                 fields=None,
                 id=None,
                 name=None,
                ):
        """
        :type  actions: :class:`list` of :class:`str` or ``None``
        :param actions: A list of actions that are to be applied to resources
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  fields: :class:`list` of :class:`str` or ``None``
        :param fields: A list of fields that are displayable to users in a table
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  id: :class:`str` or ``None``
        :param id: UUID of the instruction
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  name: :class:`str` or ``None``
        :param name: Instruction name
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.actions = actions
        self.fields = fields
        self.id = id
        self.name = name
        VapiStruct.__init__(self)


InstructionInfo._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.instruction_info', {
        'actions': type.OptionalType(type.ListType(type.StringType())),
        'fields': type.OptionalType(type.ListType(type.StringType())),
        'id': type.OptionalType(type.StringType()),
        'name': type.OptionalType(type.StringType()),
    },
    InstructionInfo,
    False,
    None))



class IntentRuntimeRequestParameters(VapiStruct):
    """
    Request parameters that represents a an intent path.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'intent_path': 'intent_path',
                            'site_path': 'site_path',
                            }

    def __init__(self,
                 intent_path=None,
                 site_path=None,
                ):
        """
        :type  intent_path: :class:`str` or ``None``
        :param intent_path: Policy Path referencing an intent object.
        :type  site_path: :class:`str` or ``None``
        :param site_path: Policy Path referencing a site. This is applicable only on a
            GlobalManager. If no site_path is specified, then based on the span
            of the intent the response will be fetched from the respective
            sites
        """
        self.intent_path = intent_path
        self.site_path = site_path
        VapiStruct.__init__(self)


IntentRuntimeRequestParameters._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.intent_runtime_request_parameters', {
        'intent_path': type.OptionalType(type.StringType()),
        'site_path': type.OptionalType(type.StringType()),
    },
    IntentRuntimeRequestParameters,
    False,
    None))



class InterSitePortCounters(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'blocked_packets': 'blocked_packets',
                            'dad_dropped_packets': 'dad_dropped_packets',
                            'destination_unsupported_dropped_packets': 'destination_unsupported_dropped_packets',
                            'dropped_packets': 'dropped_packets',
                            'firewall_dropped_packets': 'firewall_dropped_packets',
                            'frag_needed_dropped_packets': 'frag_needed_dropped_packets',
                            'ipsec_dropped_packets': 'ipsec_dropped_packets',
                            'ipsec_no_sa_dropped_packets': 'ipsec_no_sa_dropped_packets',
                            'ipsec_no_vti_dropped_packets': 'ipsec_no_vti_dropped_packets',
                            'ipsec_pol_block_dropped_packets': 'ipsec_pol_block_dropped_packets',
                            'ipsec_pol_err_dropped_packets': 'ipsec_pol_err_dropped_packets',
                            'ipv6_dropped_packets': 'ipv6_dropped_packets',
                            'kni_dropped_packets': 'kni_dropped_packets',
                            'l4port_unsupported_dropped_packets': 'l4port_unsupported_dropped_packets',
                            'malformed_dropped_packets': 'malformed_dropped_packets',
                            'no_arp_dropped_packets': 'no_arp_dropped_packets',
                            'no_linked_dropped_packets': 'no_linked_dropped_packets',
                            'no_mem_dropped_packets': 'no_mem_dropped_packets',
                            'no_receiver_dropped_packets': 'no_receiver_dropped_packets',
                            'no_route_dropped_packets': 'no_route_dropped_packets',
                            'non_ip_dropped_packets': 'non_ip_dropped_packets',
                            'proto_unsupported_dropped_packets': 'proto_unsupported_dropped_packets',
                            'redirect_dropped_packets': 'redirect_dropped_packets',
                            'rpf_check_dropped_packets': 'rpf_check_dropped_packets',
                            'service_insert_dropped_packets': 'service_insert_dropped_packets',
                            'total_bytes': 'total_bytes',
                            'total_packets': 'total_packets',
                            'ttl_exceeded_dropped_packets': 'ttl_exceeded_dropped_packets',
                            }

    def __init__(self,
                 blocked_packets=None,
                 dad_dropped_packets=None,
                 destination_unsupported_dropped_packets=None,
                 dropped_packets=None,
                 firewall_dropped_packets=None,
                 frag_needed_dropped_packets=None,
                 ipsec_dropped_packets=None,
                 ipsec_no_sa_dropped_packets=None,
                 ipsec_no_vti_dropped_packets=None,
                 ipsec_pol_block_dropped_packets=None,
                 ipsec_pol_err_dropped_packets=None,
                 ipv6_dropped_packets=None,
                 kni_dropped_packets=None,
                 l4port_unsupported_dropped_packets=None,
                 malformed_dropped_packets=None,
                 no_arp_dropped_packets=None,
                 no_linked_dropped_packets=None,
                 no_mem_dropped_packets=None,
                 no_receiver_dropped_packets=None,
                 no_route_dropped_packets=None,
                 non_ip_dropped_packets=None,
                 proto_unsupported_dropped_packets=None,
                 redirect_dropped_packets=None,
                 rpf_check_dropped_packets=None,
                 service_insert_dropped_packets=None,
                 total_bytes=None,
                 total_packets=None,
                 ttl_exceeded_dropped_packets=None,
                ):
        """
        :type  blocked_packets: :class:`long` or ``None``
        :param blocked_packets: The total number of packets blocked. format: int64
        :type  dad_dropped_packets: :class:`long` or ``None``
        :param dad_dropped_packets: Number of duplicate address detected packets dropped. format: int64
        :type  destination_unsupported_dropped_packets: :class:`long` or ``None``
        :param destination_unsupported_dropped_packets: Number of packtes dropped as destination is not supported. format:
            int64
        :type  dropped_packets: :class:`long` or ``None``
        :param dropped_packets: The total number of packets dropped. format: int64
        :type  firewall_dropped_packets: :class:`long` or ``None``
        :param firewall_dropped_packets: Number of firewall packets dropped. format: int64
        :type  frag_needed_dropped_packets: :class:`long` or ``None``
        :param frag_needed_dropped_packets: Number of fragmentation needed packets dropped. format: int64
        :type  ipsec_dropped_packets: :class:`long` or ``None``
        :param ipsec_dropped_packets: Number of IPSec packets dropped format: int64
        :type  ipsec_no_sa_dropped_packets: :class:`long` or ``None``
        :param ipsec_no_sa_dropped_packets: Number of IPSec no security association packets dropped. format:
            int64
        :type  ipsec_no_vti_dropped_packets: :class:`long` or ``None``
        :param ipsec_no_vti_dropped_packets: Number of IPSec packets dropped as no VTI is present. format: int64
        :type  ipsec_pol_block_dropped_packets: :class:`long` or ``None``
        :param ipsec_pol_block_dropped_packets: Number of IPSec policy block packets dropped. format: int64
        :type  ipsec_pol_err_dropped_packets: :class:`long` or ``None``
        :param ipsec_pol_err_dropped_packets: Number of IPSec policy error packets dropped. format: int64
        :type  ipv6_dropped_packets: :class:`long` or ``None``
        :param ipv6_dropped_packets: Number of IPV6 packets dropped. format: int64
        :type  kni_dropped_packets: :class:`long` or ``None``
        :param kni_dropped_packets: Number of DPDK kernal NIC interface packets dropped. format: int64
        :type  l4port_unsupported_dropped_packets: :class:`long` or ``None``
        :param l4port_unsupported_dropped_packets: Number of packets dropped due to unsupported L4 port. format: int64
        :type  malformed_dropped_packets: :class:`long` or ``None``
        :param malformed_dropped_packets: Number of packtes dropped as they are malformed. format: int64
        :type  no_arp_dropped_packets: :class:`long` or ``None``
        :param no_arp_dropped_packets: Number of no ARP packets dropped. format: int64
        :type  no_linked_dropped_packets: :class:`long` or ``None``
        :param no_linked_dropped_packets: Number of packets dropped as no linked ports are present. format:
            int64
        :type  no_mem_dropped_packets: :class:`long` or ``None``
        :param no_mem_dropped_packets: Number of packets dropped due to insufficient memory. format: int64
        :type  no_receiver_dropped_packets: :class:`long` or ``None``
        :param no_receiver_dropped_packets: Number of packets dropped due to absence of receiver. format: int64
        :type  no_route_dropped_packets: :class:`long` or ``None``
        :param no_route_dropped_packets: The number of no route packets dropped format: int64
        :type  non_ip_dropped_packets: :class:`long` or ``None``
        :param non_ip_dropped_packets: Number of non IP packets dropped. format: int64
        :type  proto_unsupported_dropped_packets: :class:`long` or ``None``
        :param proto_unsupported_dropped_packets: Number of packets dropped as protocol is unsupported. format: int64
        :type  redirect_dropped_packets: :class:`long` or ``None``
        :param redirect_dropped_packets: Number of redirect packets dropped. format: int64
        :type  rpf_check_dropped_packets: :class:`long` or ``None``
        :param rpf_check_dropped_packets: Number of reverse-path forwarding check packets dropped. format:
            int64
        :type  service_insert_dropped_packets: :class:`long` or ``None``
        :param service_insert_dropped_packets: Number of service insert packets dropped. format: int64
        :type  total_bytes: :class:`long` or ``None``
        :param total_bytes: The total number of bytes transferred. format: int64
        :type  total_packets: :class:`long` or ``None``
        :param total_packets: The total number of packets transferred. format: int64
        :type  ttl_exceeded_dropped_packets: :class:`long` or ``None``
        :param ttl_exceeded_dropped_packets: Number of time to live exceeded packets dropped. format: int64
        """
        self.blocked_packets = blocked_packets
        self.dad_dropped_packets = dad_dropped_packets
        self.destination_unsupported_dropped_packets = destination_unsupported_dropped_packets
        self.dropped_packets = dropped_packets
        self.firewall_dropped_packets = firewall_dropped_packets
        self.frag_needed_dropped_packets = frag_needed_dropped_packets
        self.ipsec_dropped_packets = ipsec_dropped_packets
        self.ipsec_no_sa_dropped_packets = ipsec_no_sa_dropped_packets
        self.ipsec_no_vti_dropped_packets = ipsec_no_vti_dropped_packets
        self.ipsec_pol_block_dropped_packets = ipsec_pol_block_dropped_packets
        self.ipsec_pol_err_dropped_packets = ipsec_pol_err_dropped_packets
        self.ipv6_dropped_packets = ipv6_dropped_packets
        self.kni_dropped_packets = kni_dropped_packets
        self.l4port_unsupported_dropped_packets = l4port_unsupported_dropped_packets
        self.malformed_dropped_packets = malformed_dropped_packets
        self.no_arp_dropped_packets = no_arp_dropped_packets
        self.no_linked_dropped_packets = no_linked_dropped_packets
        self.no_mem_dropped_packets = no_mem_dropped_packets
        self.no_receiver_dropped_packets = no_receiver_dropped_packets
        self.no_route_dropped_packets = no_route_dropped_packets
        self.non_ip_dropped_packets = non_ip_dropped_packets
        self.proto_unsupported_dropped_packets = proto_unsupported_dropped_packets
        self.redirect_dropped_packets = redirect_dropped_packets
        self.rpf_check_dropped_packets = rpf_check_dropped_packets
        self.service_insert_dropped_packets = service_insert_dropped_packets
        self.total_bytes = total_bytes
        self.total_packets = total_packets
        self.ttl_exceeded_dropped_packets = ttl_exceeded_dropped_packets
        VapiStruct.__init__(self)


InterSitePortCounters._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.inter_site_port_counters', {
        'blocked_packets': type.OptionalType(type.IntegerType()),
        'dad_dropped_packets': type.OptionalType(type.IntegerType()),
        'destination_unsupported_dropped_packets': type.OptionalType(type.IntegerType()),
        'dropped_packets': type.OptionalType(type.IntegerType()),
        'firewall_dropped_packets': type.OptionalType(type.IntegerType()),
        'frag_needed_dropped_packets': type.OptionalType(type.IntegerType()),
        'ipsec_dropped_packets': type.OptionalType(type.IntegerType()),
        'ipsec_no_sa_dropped_packets': type.OptionalType(type.IntegerType()),
        'ipsec_no_vti_dropped_packets': type.OptionalType(type.IntegerType()),
        'ipsec_pol_block_dropped_packets': type.OptionalType(type.IntegerType()),
        'ipsec_pol_err_dropped_packets': type.OptionalType(type.IntegerType()),
        'ipv6_dropped_packets': type.OptionalType(type.IntegerType()),
        'kni_dropped_packets': type.OptionalType(type.IntegerType()),
        'l4port_unsupported_dropped_packets': type.OptionalType(type.IntegerType()),
        'malformed_dropped_packets': type.OptionalType(type.IntegerType()),
        'no_arp_dropped_packets': type.OptionalType(type.IntegerType()),
        'no_linked_dropped_packets': type.OptionalType(type.IntegerType()),
        'no_mem_dropped_packets': type.OptionalType(type.IntegerType()),
        'no_receiver_dropped_packets': type.OptionalType(type.IntegerType()),
        'no_route_dropped_packets': type.OptionalType(type.IntegerType()),
        'non_ip_dropped_packets': type.OptionalType(type.IntegerType()),
        'proto_unsupported_dropped_packets': type.OptionalType(type.IntegerType()),
        'redirect_dropped_packets': type.OptionalType(type.IntegerType()),
        'rpf_check_dropped_packets': type.OptionalType(type.IntegerType()),
        'service_insert_dropped_packets': type.OptionalType(type.IntegerType()),
        'total_bytes': type.OptionalType(type.IntegerType()),
        'total_packets': type.OptionalType(type.IntegerType()),
        'ttl_exceeded_dropped_packets': type.OptionalType(type.IntegerType()),
    },
    InterSitePortCounters,
    False,
    None))



class InterfaceArpCsvRecord(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'ip': 'ip',
                            'mac_address': 'mac_address',
                            }

    def __init__(self,
                 ip=None,
                 mac_address=None,
                ):
        """
        :type  ip: :class:`str` or ``None``
        :param ip: The IP address format: ip
        :type  mac_address: :class:`str` or ``None``
        :param mac_address: The MAC address
        """
        self.ip = ip
        self.mac_address = mac_address
        VapiStruct.__init__(self)


InterfaceArpCsvRecord._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.interface_arp_csv_record', {
        'ip': type.OptionalType(type.StringType()),
        'mac_address': type.OptionalType(type.StringType()),
    },
    InterfaceArpCsvRecord,
    False,
    None))



class InterfaceArpEntry(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'ip': 'ip',
                            'mac_address': 'mac_address',
                            }

    def __init__(self,
                 ip=None,
                 mac_address=None,
                ):
        """
        :type  ip: :class:`str` or ``None``
        :param ip: The IP address format: ip
        :type  mac_address: :class:`str` or ``None``
        :param mac_address: The MAC address
        """
        self.ip = ip
        self.mac_address = mac_address
        VapiStruct.__init__(self)


InterfaceArpEntry._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.interface_arp_entry', {
        'ip': type.OptionalType(type.StringType()),
        'mac_address': type.OptionalType(type.StringType()),
    },
    InterfaceArpEntry,
    False,
    None))



class InterfaceArpTable(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'edge_path': 'edge_path',
                            'enforcement_point_path': 'enforcement_point_path',
                            'interface_path': 'interface_path',
                            'last_update_timestamp': 'last_update_timestamp',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 edge_path=None,
                 enforcement_point_path=None,
                 interface_path=None,
                 last_update_timestamp=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  edge_path: :class:`str` or ``None``
        :param edge_path: Policy path of edge node.
        :type  enforcement_point_path: :class:`str` or ``None``
        :param enforcement_point_path: String Path of the enforcement point.
        :type  interface_path: :class:`str` or ``None``
        :param interface_path: The ID of the logical router port
        :type  last_update_timestamp: :class:`long` or ``None``
        :param last_update_timestamp: Timestamp when the data was last updated; unset if data source has
            never updated the data. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`InterfaceArpEntry` or ``None``
        :param results: 
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.edge_path = edge_path
        self.enforcement_point_path = enforcement_point_path
        self.interface_path = interface_path
        self.last_update_timestamp = last_update_timestamp
        self.results = results
        VapiStruct.__init__(self)


InterfaceArpTable._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.interface_arp_table', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'edge_path': type.OptionalType(type.StringType()),
        'enforcement_point_path': type.OptionalType(type.StringType()),
        'interface_path': type.OptionalType(type.StringType()),
        'last_update_timestamp': type.OptionalType(type.IntegerType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'InterfaceArpEntry'))),
    },
    InterfaceArpTable,
    False,
    None))



class InterfaceArpTableInCsvFormat(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'file_name': 'file_name',
                            'last_update_timestamp': 'last_update_timestamp',
                            'results': 'results',
                            }

    def __init__(self,
                 file_name=None,
                 last_update_timestamp=None,
                 results=None,
                ):
        """
        :type  file_name: :class:`str` or ``None``
        :param file_name: File name set by HTTP server if API returns CSV result as a file.
        :type  last_update_timestamp: :class:`long` or ``None``
        :param last_update_timestamp: Timestamp when the data was last updated; unset if data source has
            never updated the data. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`InterfaceArpCsvRecord` or ``None``
        :param results: 
        """
        self.file_name = file_name
        self.last_update_timestamp = last_update_timestamp
        self.results = results
        VapiStruct.__init__(self)


InterfaceArpTableInCsvFormat._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.interface_arp_table_in_csv_format', {
        'file_name': type.OptionalType(type.StringType()),
        'last_update_timestamp': type.OptionalType(type.IntegerType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'InterfaceArpCsvRecord'))),
    },
    InterfaceArpTableInCsvFormat,
    False,
    None))



class InterfaceDADState(VapiStruct):
    """
    Duplicate address detection status on the interface.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'dad_statuses': 'dad_statuses',
                            'interface_path': 'interface_path',
                            }

    def __init__(self,
                 dad_statuses=None,
                 interface_path=None,
                ):
        """
        :type  dad_statuses: :class:`list` of :class:`InterfaceiPv6DADStatus` or ``None``
        :param dad_statuses: Array of DAD status which contains DAD information for IP addresses
            on the interface.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  interface_path: :class:`str` or ``None``
        :param interface_path: Policy path or realization ID of interface for which IPv6 DAD
            status is returned.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.dad_statuses = dad_statuses
        self.interface_path = interface_path
        VapiStruct.__init__(self)


InterfaceDADState._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.interface_DAD_state', {
        'dad_statuses': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'InterfaceiPv6DADStatus'))),
        'interface_path': type.OptionalType(type.StringType()),
    },
    InterfaceDADState,
    False,
    None))



class InterfaceiPv6DADStatus(VapiStruct):
    """
    Duplicate address detection status for IP address on the interface.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    STATUS_DUPLICATED = "DUPLICATED"
    """


    """
    STATUS_TENTATIVE = "TENTATIVE"
    """


    """
    STATUS_ASSIGNED = "ASSIGNED"
    """


    """
    STATUS_NOT_APPLICABLE = "NOT_APPLICABLE"
    """


    """
    STATUS_UNKNOWN = "UNKNOWN"
    """


    """



    _canonical_to_pep_names = {
                            'edge_paths': 'edge_paths',
                            'ip_address': 'ip_address',
                            'status': 'status',
                            }

    def __init__(self,
                 edge_paths=None,
                 ip_address=None,
                 status=None,
                ):
        """
        :type  edge_paths: :class:`list` of :class:`str` or ``None``
        :param edge_paths: Array of edge nodes on which DAD status is reported for given IP
            address.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  ip_address: :class:`str` or ``None``
        :param ip_address: IP address on the port for which DAD status is reported. format: ip
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  status: :class:`str` or ``None``
        :param status: Possible values are: 
            
            * :attr:`InterfaceiPv6DADStatus.STATUS_DUPLICATED`
            * :attr:`InterfaceiPv6DADStatus.STATUS_TENTATIVE`
            * :attr:`InterfaceiPv6DADStatus.STATUS_ASSIGNED`
            * :attr:`InterfaceiPv6DADStatus.STATUS_NOT_APPLICABLE`
            * :attr:`InterfaceiPv6DADStatus.STATUS_UNKNOWN`
            
             DAD status for IP address on the port.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.edge_paths = edge_paths
        self.ip_address = ip_address
        self.status = status
        VapiStruct.__init__(self)


InterfaceiPv6DADStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.interfacei_pv6_DAD_status', {
        'edge_paths': type.OptionalType(type.ListType(type.StringType())),
        'ip_address': type.OptionalType(type.StringType()),
        'status': type.OptionalType(type.StringType()),
    },
    InterfaceiPv6DADStatus,
    False,
    None))



class InterfaceSubnet(VapiStruct):
    """
    Subnet specification for interface connectivity

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'ip_addresses': 'ip_addresses',
                            'prefix_len': 'prefix_len',
                            }

    def __init__(self,
                 ip_addresses=None,
                 prefix_len=None,
                ):
        """
        :type  ip_addresses: :class:`list` of :class:`str` or ``None``
        :param ip_addresses: IP addresses assigned to interface format: ip
        :type  prefix_len: :class:`long` or ``None``
        :param prefix_len: Subnet prefix length format: int32
        """
        self.ip_addresses = ip_addresses
        self.prefix_len = prefix_len
        VapiStruct.__init__(self)


InterfaceSubnet._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.interface_subnet', {
        'ip_addresses': type.OptionalType(type.ListType(type.StringType())),
        'prefix_len': type.OptionalType(type.IntegerType()),
    },
    InterfaceSubnet,
    False,
    None))



class IntersiteGatewayConfig(VapiStruct):
    """
    Intersite gateway configuration.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'fallback_sites': 'fallback_sites',
                            'intersite_transit_subnet': 'intersite_transit_subnet',
                            'last_admin_active_epoch': 'last_admin_active_epoch',
                            'primary_site_path': 'primary_site_path',
                            }

    def __init__(self,
                 fallback_sites=None,
                 intersite_transit_subnet=None,
                 last_admin_active_epoch=None,
                 primary_site_path=None,
                ):
        """
        :type  fallback_sites: :class:`list` of :class:`str` or ``None``
        :param fallback_sites: Fallback site to be used as new primary site on current primary
            site failure. Disaster recovery must be initiated via API/UI.
            Fallback site configuration is supported only for T0 gateway. T1
            gateway will follow T0 gateway's primary site during disaster
            recovery.
        :type  intersite_transit_subnet: :class:`str` or ``None``
        :param intersite_transit_subnet: IPv4 subnet for inter-site transit segment connecting service
            routers across sites for stretched gateway. For IPv6 link local
            subnet is auto configured. format: ip-cidr-block
        :type  last_admin_active_epoch: :class:`long` or ``None``
        :param last_admin_active_epoch: Epoch(in seconds) is auto updated based on system current timestamp
            when primary locale service is updated. It is used for resolving
            conflict during site failover. If system clock not in sync then
            User can optionally override this. New value must be higher than
            the current value. format: int64
        :type  primary_site_path: :class:`str` or ``None``
        :param primary_site_path: Primary egress site for gateway. T0/T1 gateway in Active/Standby
            mode supports stateful services on primary site. In this mode
            primary site must be set if gateway is stretched to more than one
            site. For T0 gateway in Active/Active primary site is optional
            field. If set then secondary site prefers routes learned from
            primary over locally learned routes. This field is not applicable
            for T1 gateway with no services.
        """
        self.fallback_sites = fallback_sites
        self.intersite_transit_subnet = intersite_transit_subnet
        self.last_admin_active_epoch = last_admin_active_epoch
        self.primary_site_path = primary_site_path
        VapiStruct.__init__(self)


IntersiteGatewayConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.intersite_gateway_config', {
        'fallback_sites': type.OptionalType(type.ListType(type.StringType())),
        'intersite_transit_subnet': type.OptionalType(type.StringType()),
        'last_admin_active_epoch': type.OptionalType(type.IntegerType()),
        'primary_site_path': type.OptionalType(type.StringType()),
    },
    IntersiteGatewayConfig,
    False,
    None))



class IntervalBackupSchedule(VapiStruct):
    """
    Schedule to specify the interval time at which automated backups need to be
    taken

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "IntervalBackupSchedule"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'seconds_between_backups': 'seconds_between_backups',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 seconds_between_backups=None,
                 resource_type='IntervalBackupSchedule',
                ):
        """
        :type  seconds_between_backups: :class:`long` or ``None``
        :param seconds_between_backups: Time interval in seconds between two consecutive automated backups
            format: int64
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`BackupSchedule.RESOURCE_TYPE_WEEKLYBACKUPSCHEDULE`
            * :attr:`BackupSchedule.RESOURCE_TYPE_INTERVALBACKUPSCHEDULE`
            
             Schedule type
        """
        self.seconds_between_backups = seconds_between_backups
        self._resource_type = resource_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

IntervalBackupSchedule._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.interval_backup_schedule', {
        'seconds_between_backups': type.OptionalType(type.IntegerType()),
        'resource_type': type.StringType(),
    },
    IntervalBackupSchedule,
    False,
    None))



class IpAddressAllocation(VapiStruct):
    """
    Allocation parameters for the IP address (e.g. specific IP address) can be
    specified. Tags, display_name and description attributes are not supported
    in this release.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'allocation_ip': 'allocation_ip',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 allocation_ip=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  allocation_ip: :class:`str` or ``None``
        :param allocation_ip: Address that is allocated from pool format: ip
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.allocation_ip = allocation_ip
        VapiStruct.__init__(self)


IpAddressAllocation._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ip_address_allocation', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'allocation_ip': type.OptionalType(type.StringType()),
    },
    IpAddressAllocation,
    False,
    None))



class IpAddressAllocationListResult(VapiStruct):
    """
    List of IP address allocations

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`IpAddressAllocation` or ``None``
        :param results: List of IpAddressAllocations
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


IpAddressAllocationListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ip_address_allocation_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'IpAddressAllocation'))),
    },
    IpAddressAllocationListResult,
    False,
    None))



class IpAddressBlock(VapiStruct):
    """
    A block of IP addresses defined by a start address and a mask/prefix
    (network CIDR). An IP block is typically large & allocated to a tenant for
    automated consumption. An IP block is always a contiguous address space,
    for example 192.0.0.1/8. An IP block can be further subdivided into subnets
    called IP block subnets. These IP block subnets can be added to IP pools
    and used for IP allocation.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'cidr': 'cidr',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 cidr=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  cidr: :class:`str` or ``None``
        :param cidr: Represents a network address and the prefix length which will be
            associated with a layer-2 broadcast domain. Support IPv4 and IPv6
            CIDR. format: ip-cidr-block
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.cidr = cidr
        VapiStruct.__init__(self)


IpAddressBlock._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ip_address_block', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'cidr': type.OptionalType(type.StringType()),
    },
    IpAddressBlock,
    False,
    None))



class IpAddressBlockListResult(VapiStruct):
    """
    Paged collection of IpAddressBlocks

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`IpAddressBlock` or ``None``
        :param results: IpAddressBlock list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


IpAddressBlockListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ip_address_block_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'IpAddressBlock'))),
    },
    IpAddressBlockListResult,
    False,
    None))



class IpAddressInfo(VapiStruct):
    """
    Ipaddress information of the fabric node.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    SOURCE_TOOLS = "VM_TOOLS"
    """


    """



    _canonical_to_pep_names = {
                            'ip_addresses': 'ip_addresses',
                            'source': 'source',
                            }

    def __init__(self,
                 ip_addresses=None,
                 source=None,
                ):
        """
        :type  ip_addresses: :class:`list` of :class:`str` or ``None``
        :param ip_addresses: IP Addresses of the the virtual network interface, as discovered in
            the source. format: ip
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  source: :class:`str` or ``None``
        :param source: Possible values are: 
            
            * :attr:`IpAddressInfo.SOURCE_TOOLS`
            
             Source of the ipaddress information.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.ip_addresses = ip_addresses
        self.source = source
        VapiStruct.__init__(self)


IpAddressInfo._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ip_address_info', {
        'ip_addresses': type.OptionalType(type.ListType(type.StringType())),
        'source': type.OptionalType(type.StringType()),
    },
    IpAddressInfo,
    False,
    None))



class IpAddressPool(VapiStruct):
    """
    IpAddressPool is a collection of subnets. The subnets can either be derived
    from an IpBlock or specified by the user. User can request for IP addresses
    to be allocated from a pool. When an IP is requested from a pool, the IP
    that is returned can come from any subnet that belongs to the pool.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'ip_release_delay': 'ip_release_delay',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 ip_release_delay=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  ip_release_delay: :class:`long` or ``None``
        :param ip_release_delay: Delay in milliseconds, while releasing allocated IP address from IP
            pool (Default is 2 mins). format: int64
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.ip_release_delay = ip_release_delay
        VapiStruct.__init__(self)


IpAddressPool._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ip_address_pool', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'ip_release_delay': type.OptionalType(type.IntegerType()),
    },
    IpAddressPool,
    False,
    None))



class IpAddressPoolBlockSubnet(VapiStruct):
    """
    This type of subnet allows user to dynamically carve a subnet out of a
    preconfigured IpAddressBlock. The user must specify the size of the subnet
    and the IpAddressBlock from which the subnet is to be derived. If the
    required amount of IP adress space is available in the specified
    IpAddressBlock, the system automatically configures subnet range.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "IpAddressPoolBlockSubnet"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'auto_assign_gateway': 'auto_assign_gateway',
                            'ip_block_path': 'ip_block_path',
                            'size': 'size',
                            'start_ip': 'start_ip',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            }

    def __init__(self,
                 auto_assign_gateway=None,
                 ip_block_path=None,
                 size=None,
                 start_ip=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='IpAddressPoolBlockSubnet',
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                ):
        """
        :type  auto_assign_gateway: :class:`bool` or ``None``
        :param auto_assign_gateway: If this property is set to true, the first IP in the range will be
            reserved for gateway.
        :type  ip_block_path: :class:`str` or ``None``
        :param ip_block_path: The path of the IpAddressBlock from which the subnet is to be
            created.
        :type  size: :class:`long` or ``None``
        :param size: The size parameter is required for subnet creation. It must be
            specified during creation but cannot be changed later. format:
            int64
        :type  start_ip: :class:`str` or ``None``
        :param start_ip: For internal system use Only. Represents start ip address of the
            subnet from IP block. Subnet ip adddress will start from this ip
            address. format: ip
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`IpAddressPoolSubnet.RESOURCE_TYPE_IPADDRESSPOOLBLOCKSUBNET`
            *
              :attr:`IpAddressPoolSubnet.RESOURCE_TYPE_IPADDRESSPOOLSTATICSUBNET`
            
            Specifies whether the IpAddressPoolSubnet is to be carved out of a
            IpAddressBlock or will be specified by the user
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.auto_assign_gateway = auto_assign_gateway
        self.ip_block_path = ip_block_path
        self.size = size
        self.start_ip = start_ip
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

IpAddressPoolBlockSubnet._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ip_address_pool_block_subnet', {
        'auto_assign_gateway': type.OptionalType(type.BooleanType()),
        'ip_block_path': type.OptionalType(type.StringType()),
        'size': type.OptionalType(type.IntegerType()),
        'start_ip': type.OptionalType(type.StringType()),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
    },
    IpAddressPoolBlockSubnet,
    False,
    None))



class IpAddressPoolListResult(VapiStruct):
    """
    Paged collection of IpAddressPools

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`IpAddressPool` or ``None``
        :param results: IpAddressPool list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


IpAddressPoolListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ip_address_pool_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'IpAddressPool'))),
    },
    IpAddressPoolListResult,
    False,
    None))



class IpAddressPoolStaticSubnet(VapiStruct):
    """
    This type of subnet is statically configured by the user. The user provides
    the range details and the gateway for the subnet.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "IpAddressPoolStaticSubnet"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'allocation_ranges': 'allocation_ranges',
                            'cidr': 'cidr',
                            'dns_nameservers': 'dns_nameservers',
                            'dns_suffix': 'dns_suffix',
                            'gateway_ip': 'gateway_ip',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            }

    def __init__(self,
                 allocation_ranges=None,
                 cidr=None,
                 dns_nameservers=None,
                 dns_suffix=None,
                 gateway_ip=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='IpAddressPoolStaticSubnet',
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                ):
        """
        :type  allocation_ranges: :class:`list` of :class:`IpPoolRange` or ``None``
        :param allocation_ranges: A collection of IPv4 or IPv6 IP Pool Ranges.
        :type  cidr: :class:`str` or ``None``
        :param cidr: Subnet representation is a network address and prefix length
        :type  dns_nameservers: :class:`list` of :class:`str` or ``None``
        :param dns_nameservers: The collection of upto 3 DNS servers for the subnet. format: ip
        :type  dns_suffix: :class:`str` or ``None``
        :param dns_suffix: The DNS suffix for the DNS server. format: hostname
        :type  gateway_ip: :class:`str` or ``None``
        :param gateway_ip: The default gateway address on a layer-3 router. format: ip
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`IpAddressPoolSubnet.RESOURCE_TYPE_IPADDRESSPOOLBLOCKSUBNET`
            *
              :attr:`IpAddressPoolSubnet.RESOURCE_TYPE_IPADDRESSPOOLSTATICSUBNET`
            
            Specifies whether the IpAddressPoolSubnet is to be carved out of a
            IpAddressBlock or will be specified by the user
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.allocation_ranges = allocation_ranges
        self.cidr = cidr
        self.dns_nameservers = dns_nameservers
        self.dns_suffix = dns_suffix
        self.gateway_ip = gateway_ip
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

IpAddressPoolStaticSubnet._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ip_address_pool_static_subnet', {
        'allocation_ranges': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'IpPoolRange'))),
        'cidr': type.OptionalType(type.StringType()),
        'dns_nameservers': type.OptionalType(type.ListType(type.StringType())),
        'dns_suffix': type.OptionalType(type.StringType()),
        'gateway_ip': type.OptionalType(type.StringType()),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
    },
    IpAddressPoolStaticSubnet,
    False,
    None))



class IpAddressPoolSubnet(VapiStruct):
    """
    IpAddressPoolSubnet can either be carved out of a PolicyBlock or statically
    specified by the user. In the first case where the subnet is carved out of
    a IpAddressBlock, the user must specify the ID of the block from which this
    subnet is to be derived. This block must be pre-created. The subnet range
    is auto populated by the system. In the second case, the user configures
    the subnet range directly. No IpAddressBlock is required.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "IpAddressPoolSubnet"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    RESOURCE_TYPE_IPADDRESSPOOLBLOCKSUBNET = "IpAddressPoolBlockSubnet"
    """


    """
    RESOURCE_TYPE_IPADDRESSPOOLSTATICSUBNET = "IpAddressPoolStaticSubnet"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='IpAddressPoolSubnet',
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`IpAddressPoolSubnet.RESOURCE_TYPE_IPADDRESSPOOLBLOCKSUBNET`
            *
              :attr:`IpAddressPoolSubnet.RESOURCE_TYPE_IPADDRESSPOOLSTATICSUBNET`
            
            Specifies whether the IpAddressPoolSubnet is to be carved out of a
            IpAddressBlock or will be specified by the user
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

IpAddressPoolSubnet._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ip_address_pool_subnet', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
    },
    IpAddressPoolSubnet,
    False,
    None))



class IpAddressPoolSubnetListResult(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param results: IP Pool subnet list results
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`IpAddressPoolSubnet`. When methods return a value of this
            class as a return value, the attribute will contain all the
            attributes defined in :class:`IpAddressPoolSubnet`.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


IpAddressPoolSubnetListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ip_address_pool_subnet_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'IpAddressPoolSubnet')]))),
    },
    IpAddressPoolSubnetListResult,
    False,
    None))



class IpPoolRange(VapiStruct):
    """
    A set of IPv4 or IPv6 addresses defined by a start and end address.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'end': 'end',
                            'start': 'start',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 end=None,
                 start=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  end: :class:`str` or ``None``
        :param end: The end IP Address of the IP Range. format: ip
        :type  start: :class:`str` or ``None``
        :param start: The start IP Address of the IP Range. format: ip
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.end = end
        self.start = start
        VapiStruct.__init__(self)


IpPoolRange._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ip_pool_range', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'end': type.OptionalType(type.StringType()),
        'start': type.OptionalType(type.StringType()),
    },
    IpPoolRange,
    False,
    None))



class IpSecVpnPolicyTrafficStatistics(VapiStruct):
    """
    IPSec VPN policy traffic statistics

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'aggregate_traffic_counters': 'aggregate_traffic_counters',
                            'rule_path': 'rule_path',
                            'tunnel_interface_path': 'tunnel_interface_path',
                            'tunnel_statistics': 'tunnel_statistics',
                            }

    def __init__(self,
                 aggregate_traffic_counters=None,
                 rule_path=None,
                 tunnel_interface_path=None,
                 tunnel_statistics=None,
                ):
        """
        :type  aggregate_traffic_counters: :class:`IPSecVpnTrafficCounters` or ``None``
        :param aggregate_traffic_counters: Aggregate traffic statistics across all IPSec tunnels.
        :type  rule_path: :class:`str` or ``None``
        :param rule_path: Policy path referencing the IPSec VPN Rule.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  tunnel_interface_path: :class:`str` or ``None``
        :param tunnel_interface_path: Policy path referencing the IPSec VPN Tunnel Interface.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  tunnel_statistics: :class:`list` of :class:`IpSecVpnTunnelTrafficStatistics` or ``None``
        :param tunnel_statistics: Tunnel statistics.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.aggregate_traffic_counters = aggregate_traffic_counters
        self.rule_path = rule_path
        self.tunnel_interface_path = tunnel_interface_path
        self.tunnel_statistics = tunnel_statistics
        VapiStruct.__init__(self)


IpSecVpnPolicyTrafficStatistics._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ip_sec_vpn_policy_traffic_statistics', {
        'aggregate_traffic_counters': type.OptionalType(type.ReferenceType(__name__, 'IPSecVpnTrafficCounters')),
        'rule_path': type.OptionalType(type.StringType()),
        'tunnel_interface_path': type.OptionalType(type.StringType()),
        'tunnel_statistics': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'IpSecVpnTunnelTrafficStatistics'))),
    },
    IpSecVpnPolicyTrafficStatistics,
    False,
    None))



class IpSecVpnTunnelTrafficStatistics(VapiStruct):
    """
    IPSec VPN tunnel traffic statistics.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    TUNNEL_STATUS_UP = "UP"
    """


    """
    TUNNEL_STATUS_DOWN = "DOWN"
    """


    """



    _canonical_to_pep_names = {
                            'bytes_in': 'bytes_in',
                            'bytes_out': 'bytes_out',
                            'decryption_failures': 'decryption_failures',
                            'dropped_packets_in': 'dropped_packets_in',
                            'dropped_packets_out': 'dropped_packets_out',
                            'encryption_failures': 'encryption_failures',
                            'integrity_failures': 'integrity_failures',
                            'local_subnet': 'local_subnet',
                            'nomatching_policy_errors': 'nomatching_policy_errors',
                            'packets_in': 'packets_in',
                            'packets_out': 'packets_out',
                            'packets_received_other_error': 'packets_received_other_error',
                            'packets_sent_other_error': 'packets_sent_other_error',
                            'peer_subnet': 'peer_subnet',
                            'replay_errors': 'replay_errors',
                            'sa_mismatch_errors_in': 'sa_mismatch_errors_in',
                            'sa_mismatch_errors_out': 'sa_mismatch_errors_out',
                            'seq_number_overflow_error': 'seq_number_overflow_error',
                            'tunnel_down_reason': 'tunnel_down_reason',
                            'tunnel_status': 'tunnel_status',
                            }

    def __init__(self,
                 bytes_in=None,
                 bytes_out=None,
                 decryption_failures=None,
                 dropped_packets_in=None,
                 dropped_packets_out=None,
                 encryption_failures=None,
                 integrity_failures=None,
                 local_subnet=None,
                 nomatching_policy_errors=None,
                 packets_in=None,
                 packets_out=None,
                 packets_received_other_error=None,
                 packets_sent_other_error=None,
                 peer_subnet=None,
                 replay_errors=None,
                 sa_mismatch_errors_in=None,
                 sa_mismatch_errors_out=None,
                 seq_number_overflow_error=None,
                 tunnel_down_reason=None,
                 tunnel_status=None,
                ):
        """
        :type  bytes_in: :class:`long` or ``None``
        :param bytes_in: Total number of incoming bytes on inbound Security association.
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  bytes_out: :class:`long` or ``None``
        :param bytes_out: Total number of outgoing bytes on outbound Security association.
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  decryption_failures: :class:`long` or ``None``
        :param decryption_failures: Total number of packets dropped due to decryption failures. format:
            int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  dropped_packets_in: :class:`long` or ``None``
        :param dropped_packets_in: Total number of incoming packets dropped on inbound security
            association. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  dropped_packets_out: :class:`long` or ``None``
        :param dropped_packets_out: Total number of outgoing packets dropped on outbound security
            association. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  encryption_failures: :class:`long` or ``None``
        :param encryption_failures: Total number of packets dropped because of failure in encryption.
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  integrity_failures: :class:`long` or ``None``
        :param integrity_failures: Total number of packets dropped due to integrity failures. format:
            int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  local_subnet: :class:`str` or ``None``
        :param local_subnet: Tunnel local subnet in IPv4 CIDR Block format.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  nomatching_policy_errors: :class:`long` or ``None``
        :param nomatching_policy_errors: Number of packets dropped because of no matching policy is
            available. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  packets_in: :class:`long` or ``None``
        :param packets_in: Total number of incoming packets on inbound Security association.
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  packets_out: :class:`long` or ``None``
        :param packets_out: Total number of outgoing packets on outbound Security association.
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  packets_received_other_error: :class:`long` or ``None``
        :param packets_received_other_error: Total number of incoming packets dropped on inbound Security
            association. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  packets_sent_other_error: :class:`long` or ``None``
        :param packets_sent_other_error: Total number of packets dropped while sending for any reason.
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  peer_subnet: :class:`str` or ``None``
        :param peer_subnet: Tunnel peer subnet in IPv4 CIDR Block format.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  replay_errors: :class:`long` or ``None``
        :param replay_errors: Total number of packets dropped due to replay check on that
            Security association. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sa_mismatch_errors_in: :class:`long` or ``None``
        :param sa_mismatch_errors_in: Totoal number of security association mismatch errors on incoming
            packets. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sa_mismatch_errors_out: :class:`long` or ``None``
        :param sa_mismatch_errors_out: Totoal number of security association mismatch errors on outgoing
            packets. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  seq_number_overflow_error: :class:`long` or ``None``
        :param seq_number_overflow_error: Total number of packets dropped while sending due to overflow in
            sequence number. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  tunnel_down_reason: :class:`str` or ``None``
        :param tunnel_down_reason: Gives the detailed reason about the tunnel when it is down. If
            tunnel is UP tunnel down reason will be empty.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  tunnel_status: :class:`str` or ``None``
        :param tunnel_status: Possible values are: 
            
            * :attr:`IpSecVpnTunnelTrafficStatistics.TUNNEL_STATUS_UP`
            * :attr:`IpSecVpnTunnelTrafficStatistics.TUNNEL_STATUS_DOWN`
            
             Specifies the status of tunnel, if it is UP/DOWN.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.bytes_in = bytes_in
        self.bytes_out = bytes_out
        self.decryption_failures = decryption_failures
        self.dropped_packets_in = dropped_packets_in
        self.dropped_packets_out = dropped_packets_out
        self.encryption_failures = encryption_failures
        self.integrity_failures = integrity_failures
        self.local_subnet = local_subnet
        self.nomatching_policy_errors = nomatching_policy_errors
        self.packets_in = packets_in
        self.packets_out = packets_out
        self.packets_received_other_error = packets_received_other_error
        self.packets_sent_other_error = packets_sent_other_error
        self.peer_subnet = peer_subnet
        self.replay_errors = replay_errors
        self.sa_mismatch_errors_in = sa_mismatch_errors_in
        self.sa_mismatch_errors_out = sa_mismatch_errors_out
        self.seq_number_overflow_error = seq_number_overflow_error
        self.tunnel_down_reason = tunnel_down_reason
        self.tunnel_status = tunnel_status
        VapiStruct.__init__(self)


IpSecVpnTunnelTrafficStatistics._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ip_sec_vpn_tunnel_traffic_statistics', {
        'bytes_in': type.OptionalType(type.IntegerType()),
        'bytes_out': type.OptionalType(type.IntegerType()),
        'decryption_failures': type.OptionalType(type.IntegerType()),
        'dropped_packets_in': type.OptionalType(type.IntegerType()),
        'dropped_packets_out': type.OptionalType(type.IntegerType()),
        'encryption_failures': type.OptionalType(type.IntegerType()),
        'integrity_failures': type.OptionalType(type.IntegerType()),
        'local_subnet': type.OptionalType(type.StringType()),
        'nomatching_policy_errors': type.OptionalType(type.IntegerType()),
        'packets_in': type.OptionalType(type.IntegerType()),
        'packets_out': type.OptionalType(type.IntegerType()),
        'packets_received_other_error': type.OptionalType(type.IntegerType()),
        'packets_sent_other_error': type.OptionalType(type.IntegerType()),
        'peer_subnet': type.OptionalType(type.StringType()),
        'replay_errors': type.OptionalType(type.IntegerType()),
        'sa_mismatch_errors_in': type.OptionalType(type.IntegerType()),
        'sa_mismatch_errors_out': type.OptionalType(type.IntegerType()),
        'seq_number_overflow_error': type.OptionalType(type.IntegerType()),
        'tunnel_down_reason': type.OptionalType(type.StringType()),
        'tunnel_status': type.OptionalType(type.StringType()),
    },
    IpSecVpnTunnelTrafficStatistics,
    False,
    None))



class Ipv4Header(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'dst_ip': 'dst_ip',
                            'flags': 'flags',
                            'protocol': 'protocol',
                            'src_ip': 'src_ip',
                            'src_subnet_prefix_len': 'src_subnet_prefix_len',
                            'ttl': 'ttl',
                            }

    def __init__(self,
                 dst_ip=None,
                 flags=None,
                 protocol=None,
                 src_ip=None,
                 src_subnet_prefix_len=None,
                 ttl=None,
                ):
        """
        :type  dst_ip: :class:`str` or ``None``
        :param dst_ip: The destination ip address. format: ipv4
        :type  flags: :class:`long` or ``None``
        :param flags: IP flags format: int64
        :type  protocol: :class:`long` or ``None``
        :param protocol: IP protocol - defaults to ICMP format: int64
        :type  src_ip: :class:`str` or ``None``
        :param src_ip: The source ip address. format: ipv4
        :type  src_subnet_prefix_len: :class:`long` or ``None``
        :param src_subnet_prefix_len: This is used together with src_ip to calculate dst_ip for broadcast
            when dst_ip is not given; not used in all other cases. format:
            int64
        :type  ttl: :class:`long` or ``None``
        :param ttl: Time to live (ttl) format: int64
        """
        self.dst_ip = dst_ip
        self.flags = flags
        self.protocol = protocol
        self.src_ip = src_ip
        self.src_subnet_prefix_len = src_subnet_prefix_len
        self.ttl = ttl
        VapiStruct.__init__(self)


Ipv4Header._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ipv4_header', {
        'dst_ip': type.OptionalType(type.StringType()),
        'flags': type.OptionalType(type.IntegerType()),
        'protocol': type.OptionalType(type.IntegerType()),
        'src_ip': type.OptionalType(type.StringType()),
        'src_subnet_prefix_len': type.OptionalType(type.IntegerType()),
        'ttl': type.OptionalType(type.IntegerType()),
    },
    Ipv4Header,
    False,
    None))



class Ipv6DadProfile(VapiStruct):
    """
    Duplicate address detection profile.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    DAD_MODE_LOOSE = "LOOSE"
    """


    """
    DAD_MODE_STRICT = "STRICT"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'dad_mode': 'dad_mode',
                            'ns_retries': 'ns_retries',
                            'wait_time': 'wait_time',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 dad_mode=None,
                 ns_retries=None,
                 wait_time=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  dad_mode: :class:`str` or ``None``
        :param dad_mode: Possible values are: 
            
            * :attr:`Ipv6DadProfile.DAD_MODE_LOOSE`
            * :attr:`Ipv6DadProfile.DAD_MODE_STRICT`
            
             DAD Mode
        :type  ns_retries: :class:`long` or ``None``
        :param ns_retries: Number of Neighbor solicitation packets generated before completing
            the Duplicate address detection process. format: int64
        :type  wait_time: :class:`long` or ``None``
        :param wait_time: The time duration in seconds, to wait for Neighbor advertisement
            after sending the Neighbor solicitation message. format: int64
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.dad_mode = dad_mode
        self.ns_retries = ns_retries
        self.wait_time = wait_time
        VapiStruct.__init__(self)


Ipv6DadProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ipv6_dad_profile', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'dad_mode': type.OptionalType(type.StringType()),
        'ns_retries': type.OptionalType(type.IntegerType()),
        'wait_time': type.OptionalType(type.IntegerType()),
    },
    Ipv6DadProfile,
    False,
    None))



class Ipv6DadProfileListResult(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`Ipv6DadProfile` or ``None``
        :param results: Paginated list of Ipv6DadProfile
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


Ipv6DadProfileListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ipv6_dad_profile_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Ipv6DadProfile'))),
    },
    Ipv6DadProfileListResult,
    False,
    None))



class Ipv6Header(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'dst_ip': 'dst_ip',
                            'hop_limit': 'hop_limit',
                            'next_header': 'next_header',
                            'src_ip': 'src_ip',
                            }

    def __init__(self,
                 dst_ip=None,
                 hop_limit=None,
                 next_header=None,
                 src_ip=None,
                ):
        """
        :type  dst_ip: :class:`str` or ``None``
        :param dst_ip: The destination ip address. format: ipv6
        :type  hop_limit: :class:`long` or ``None``
        :param hop_limit: Decremented by 1 by each node that forwards the packets. The packet
            is discarded if Hop Limit is decremented to zero. format: int64
        :type  next_header: :class:`long` or ``None``
        :param next_header: Identifies the type of header immediately following the IPv6
            header. format: int64
        :type  src_ip: :class:`str` or ``None``
        :param src_ip: The source ip address. format: ipv6
        """
        self.dst_ip = dst_ip
        self.hop_limit = hop_limit
        self.next_header = next_header
        self.src_ip = src_ip
        VapiStruct.__init__(self)


Ipv6Header._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ipv6_header', {
        'dst_ip': type.OptionalType(type.StringType()),
        'hop_limit': type.OptionalType(type.IntegerType()),
        'next_header': type.OptionalType(type.IntegerType()),
        'src_ip': type.OptionalType(type.StringType()),
    },
    Ipv6Header,
    False,
    None))



class Ipv6NdraProfile(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    RA_MODE_DISABLED = "DISABLED"
    """


    """
    RA_MODE_SLAAC_DNS_THROUGH_RA = "SLAAC_DNS_THROUGH_RA"
    """


    """
    RA_MODE_SLAAC_DNS_THROUGH_DHCP = "SLAAC_DNS_THROUGH_DHCP"
    """


    """
    RA_MODE_DHCP_ADDRESS_AND_DNS_THROUGH_DHCP = "DHCP_ADDRESS_AND_DNS_THROUGH_DHCP"
    """


    """
    RA_MODE_SLAAC_AND_ADDRESS_DNS_THROUGH_DHCP = "SLAAC_AND_ADDRESS_DNS_THROUGH_DHCP"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'dns_config': 'dns_config',
                            'ra_config': 'ra_config',
                            'ra_mode': 'ra_mode',
                            'reachable_timer': 'reachable_timer',
                            'retransmit_interval': 'retransmit_interval',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 dns_config=None,
                 ra_config=None,
                 ra_mode=None,
                 reachable_timer=None,
                 retransmit_interval=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  dns_config: :class:`RaDNSConfig` or ``None``
        :param dns_config: DNS Configurations
        :type  ra_config: :class:`RAConfig` or ``None``
        :param ra_config: RA Configuration
        :type  ra_mode: :class:`str` or ``None``
        :param ra_mode: Possible values are: 
            
            * :attr:`Ipv6NdraProfile.RA_MODE_DISABLED`
            * :attr:`Ipv6NdraProfile.RA_MODE_SLAAC_DNS_THROUGH_RA`
            * :attr:`Ipv6NdraProfile.RA_MODE_SLAAC_DNS_THROUGH_DHCP`
            * :attr:`Ipv6NdraProfile.RA_MODE_DHCP_ADDRESS_AND_DNS_THROUGH_DHCP`
            *
              :attr:`Ipv6NdraProfile.RA_MODE_SLAAC_AND_ADDRESS_DNS_THROUGH_DHCP`
            
             RA Mode
        :type  reachable_timer: :class:`long` or ``None``
        :param reachable_timer: Neighbour reachable time duration in milliseconds. A value of 0
            means unspecified. format: int64
        :type  retransmit_interval: :class:`long` or ``None``
        :param retransmit_interval: The time, in milliseconds, between retransmitted neighbour
            solicitation messages. A value of 0 means unspecified. format:
            int64
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.dns_config = dns_config
        self.ra_config = ra_config
        self.ra_mode = ra_mode
        self.reachable_timer = reachable_timer
        self.retransmit_interval = retransmit_interval
        VapiStruct.__init__(self)


Ipv6NdraProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ipv6_ndra_profile', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'dns_config': type.OptionalType(type.ReferenceType(__name__, 'RaDNSConfig')),
        'ra_config': type.OptionalType(type.ReferenceType(__name__, 'RAConfig')),
        'ra_mode': type.OptionalType(type.StringType()),
        'reachable_timer': type.OptionalType(type.IntegerType()),
        'retransmit_interval': type.OptionalType(type.IntegerType()),
    },
    Ipv6NdraProfile,
    False,
    None))



class Ipv6NdraProfileListResult(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`Ipv6NdraProfile` or ``None``
        :param results: Paginated list of Ipv6NdraProfile
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


Ipv6NdraProfileListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ipv6_ndra_profile_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Ipv6NdraProfile'))),
    },
    Ipv6NdraProfileListResult,
    False,
    None))



class KeyValuePair(VapiStruct):
    """
    An arbitrary key-value pair

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'key': 'key',
                            'value': 'value',
                            }

    def __init__(self,
                 key=None,
                 value=None,
                ):
        """
        :type  key: :class:`str` or ``None``
        :param key: Key
        :type  value: :class:`str` or ``None``
        :param value: Value
        """
        self.key = key
        self.value = value
        VapiStruct.__init__(self)


KeyValuePair._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.key_value_pair', {
        'key': type.OptionalType(type.StringType()),
        'value': type.OptionalType(type.StringType()),
    },
    KeyValuePair,
    False,
    None))



class L2BridgeEndpointProfile(VapiStruct):
    """
    Used to configure L2 Bridge endpoint profile

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    FAILOVER_MODE_PREEMPTIVE = "PREEMPTIVE"
    """


    """
    FAILOVER_MODE_NON_PREEMPTIVE = "NON_PREEMPTIVE"
    """


    """
    HA_MODE_STANDBY = "ACTIVE_STANDBY"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'edge_paths': 'edge_paths',
                            'failover_mode': 'failover_mode',
                            'ha_mode': 'ha_mode',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 edge_paths=None,
                 failover_mode=None,
                 ha_mode=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  edge_paths: :class:`list` of :class:`str` or ``None``
        :param edge_paths: List of policy paths to edge nodes. Edge allocation for L2
            bridging.
        :type  failover_mode: :class:`str` or ``None``
        :param failover_mode: Possible values are: 
            
            * :attr:`L2BridgeEndpointProfile.FAILOVER_MODE_PREEMPTIVE`
            * :attr:`L2BridgeEndpointProfile.FAILOVER_MODE_NON_PREEMPTIVE`
            
             Failover mode for the edge bridge cluster
        :type  ha_mode: :class:`str` or ``None``
        :param ha_mode: Possible values are: 
            
            * :attr:`L2BridgeEndpointProfile.HA_MODE_STANDBY`
            
            High avaialability mode can be active-active or active-standby.
            High availability mode cannot be modified after realization.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.edge_paths = edge_paths
        self.failover_mode = failover_mode
        self.ha_mode = ha_mode
        VapiStruct.__init__(self)


L2BridgeEndpointProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.l2_bridge_endpoint_profile', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'edge_paths': type.OptionalType(type.ListType(type.StringType())),
        'failover_mode': type.OptionalType(type.StringType()),
        'ha_mode': type.OptionalType(type.StringType()),
    },
    L2BridgeEndpointProfile,
    False,
    None))



class L2BridgeEndpointProfileListResult(VapiStruct):
    """
    Paged Collection of L2BridgeEndpointProfile

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`L2BridgeEndpointProfile` or ``None``
        :param results: L2BridgeEndpointProfile list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


L2BridgeEndpointProfileListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.l2_bridge_endpoint_profile_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'L2BridgeEndpointProfile'))),
    },
    L2BridgeEndpointProfileListResult,
    False,
    None))



class L2Extension(VapiStruct):
    """
    Segment specific L2 VPN configuration

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'l2vpn_path': 'l2vpn_path',
                            'l2vpn_paths': 'l2vpn_paths',
                            'local_egress': 'local_egress',
                            'tunnel_id': 'tunnel_id',
                            }

    def __init__(self,
                 l2vpn_path=None,
                 l2vpn_paths=None,
                 local_egress=None,
                 tunnel_id=None,
                ):
        """
        :type  l2vpn_path: :class:`str` or ``None``
        :param l2vpn_path: This property has been deprecated. Please use the property
            l2vpn_paths for setting the paths of associated L2 VPN session.
            This property will continue to work as expected to provide
            backwards compatibility. However, when both l2vpn_path and
            l2vpn_paths properties are specified, only l2vpn_paths is used.
        :type  l2vpn_paths: :class:`list` of :class:`str` or ``None``
        :param l2vpn_paths: Policy paths corresponding to the associated L2 VPN sessions
        :type  local_egress: :class:`LocalEgress` or ``None``
        :param local_egress: Local Egress.
        :type  tunnel_id: :class:`long` or ``None``
        :param tunnel_id: Tunnel ID format: int32
        """
        self.l2vpn_path = l2vpn_path
        self.l2vpn_paths = l2vpn_paths
        self.local_egress = local_egress
        self.tunnel_id = tunnel_id
        VapiStruct.__init__(self)


L2Extension._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.l2_extension', {
        'l2vpn_path': type.OptionalType(type.StringType()),
        'l2vpn_paths': type.OptionalType(type.ListType(type.StringType())),
        'local_egress': type.OptionalType(type.ReferenceType(__name__, 'LocalEgress')),
        'tunnel_id': type.OptionalType(type.IntegerType()),
    },
    L2Extension,
    False,
    None))



class L2ForwarderRemoteMacsPerSite(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'remote_active_ips': 'remote_active_ips',
                            'remote_mac_addresses': 'remote_mac_addresses',
                            'remote_site': 'remote_site',
                            'remote_standby_ips': 'remote_standby_ips',
                            'rtep_group_id': 'rtep_group_id',
                            }

    def __init__(self,
                 remote_active_ips=None,
                 remote_mac_addresses=None,
                 remote_site=None,
                 remote_standby_ips=None,
                 rtep_group_id=None,
                ):
        """
        :type  remote_active_ips: :class:`list` of :class:`str` or ``None``
        :param remote_active_ips: Remote active IP addresses. format: ip
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  remote_mac_addresses: :class:`list` of :class:`str` or ``None``
        :param remote_mac_addresses: Remote mac addresses.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  remote_site: :class:`ResourceReference` or ``None``
        :param remote_site: Remote site details.
        :type  remote_standby_ips: :class:`list` of :class:`str` or ``None``
        :param remote_standby_ips: Remote standby IP addresses. format: ip
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  rtep_group_id: :class:`long` or ``None``
        :param rtep_group_id: 32 bit unique RTEP group id of the logical switch per site. format:
            int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.remote_active_ips = remote_active_ips
        self.remote_mac_addresses = remote_mac_addresses
        self.remote_site = remote_site
        self.remote_standby_ips = remote_standby_ips
        self.rtep_group_id = rtep_group_id
        VapiStruct.__init__(self)


L2ForwarderRemoteMacsPerSite._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.l2_forwarder_remote_macs_per_site', {
        'remote_active_ips': type.OptionalType(type.ListType(type.StringType())),
        'remote_mac_addresses': type.OptionalType(type.ListType(type.StringType())),
        'remote_site': type.OptionalType(type.ReferenceType(__name__, 'ResourceReference')),
        'remote_standby_ips': type.OptionalType(type.ListType(type.StringType())),
        'rtep_group_id': type.OptionalType(type.IntegerType()),
    },
    L2ForwarderRemoteMacsPerSite,
    False,
    None))



class L2ForwarderStatusPerNode(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    HIGH_AVAILABILITY_STATUS_ACTIVE = "ACTIVE"
    """


    """
    HIGH_AVAILABILITY_STATUS_STANDBY = "STANDBY"
    """


    """
    HIGH_AVAILABILITY_STATUS_DOWN = "DOWN"
    """


    """
    HIGH_AVAILABILITY_STATUS_SYNC = "SYNC"
    """


    """
    HIGH_AVAILABILITY_STATUS_UNKNOWN = "UNKNOWN"
    """


    """



    _canonical_to_pep_names = {
                            'high_availability_status': 'high_availability_status',
                            'transport_node': 'transport_node',
                            }

    def __init__(self,
                 high_availability_status=None,
                 transport_node=None,
                ):
        """
        :type  high_availability_status: :class:`str` or ``None``
        :param high_availability_status: Possible values are: 
            
            * :attr:`L2ForwarderStatusPerNode.HIGH_AVAILABILITY_STATUS_ACTIVE`
            * :attr:`L2ForwarderStatusPerNode.HIGH_AVAILABILITY_STATUS_STANDBY`
            * :attr:`L2ForwarderStatusPerNode.HIGH_AVAILABILITY_STATUS_DOWN`
            * :attr:`L2ForwarderStatusPerNode.HIGH_AVAILABILITY_STATUS_SYNC`
            * :attr:`L2ForwarderStatusPerNode.HIGH_AVAILABILITY_STATUS_UNKNOWN`
            
             High Availability status of a service router on the edge node.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  transport_node: :class:`ResourceReference` or ``None``
        :param transport_node: Edge node details from where the router status is being retrieved.
        """
        self.high_availability_status = high_availability_status
        self.transport_node = transport_node
        VapiStruct.__init__(self)


L2ForwarderStatusPerNode._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.l2_forwarder_status_per_node', {
        'high_availability_status': type.OptionalType(type.StringType()),
        'transport_node': type.OptionalType(type.ReferenceType(__name__, 'ResourceReference')),
    },
    L2ForwarderStatusPerNode,
    False,
    None))



class L2VPNService(VapiStruct):
    """
    L2VPN Service defines if service running as server or client. It also
    defines all the common properties for the multiple L2VPN Sessions
    associated with this service.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    MODE_SERVER = "SERVER"
    """


    """
    MODE_CLIENT = "CLIENT"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'enable_hub': 'enable_hub',
                            'encap_ip_pool': 'encap_ip_pool',
                            'mode': 'mode',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 enable_hub=None,
                 encap_ip_pool=None,
                 mode=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  enable_hub: :class:`bool` or ``None``
        :param enable_hub: This property applies only in SERVER mode. If set to true, traffic
            from any client will be replicated to all other clients. If set to
            false, traffic received from clients is only replicated to the
            local VPN endpoint.
        :type  encap_ip_pool: :class:`list` of :class:`str` or ``None``
        :param encap_ip_pool: IP Pool to allocate local and peer endpoint IPs for L2VpnSession
            logical tap. format: ipv4-cidr-block
        :type  mode: :class:`str` or ``None``
        :param mode: Possible values are: 
            
            * :attr:`L2VPNService.MODE_SERVER`
            * :attr:`L2VPNService.MODE_CLIENT`
            
             Specify an L2VPN service mode as SERVER or CLIENT.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.enable_hub = enable_hub
        self.encap_ip_pool = encap_ip_pool
        self.mode = mode
        VapiStruct.__init__(self)


L2VPNService._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.l2_VPN_service', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'enable_hub': type.OptionalType(type.BooleanType()),
        'encap_ip_pool': type.OptionalType(type.ListType(type.StringType())),
        'mode': type.OptionalType(type.StringType()),
    },
    L2VPNService,
    False,
    None))



class L2VPNServiceListResult(VapiStruct):
    """
    Paged Collection of L2VPNServices

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`L2VPNService` or ``None``
        :param results: L2VPNService list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


L2VPNServiceListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.l2_VPN_service_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'L2VPNService'))),
    },
    L2VPNServiceListResult,
    False,
    None))



class L2VPNSession(VapiStruct):
    """
    Defines the tunnel local and peer addresses along with multiple tansport
    tunnels for redundancy. L2VPNSession belongs to only one L2VPNService.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'enabled': 'enabled',
                            'transport_tunnels': 'transport_tunnels',
                            'tunnel_encapsulation': 'tunnel_encapsulation',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 enabled=None,
                 transport_tunnels=None,
                 tunnel_encapsulation=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  enabled: :class:`bool` or ``None``
        :param enabled: Enable to extend all the associated segments.
        :type  transport_tunnels: :class:`list` of :class:`str` or ``None``
        :param transport_tunnels: List of transport tunnels for redundancy.
        :type  tunnel_encapsulation: :class:`L2VPNTunnelEncapsulation` or ``None``
        :param tunnel_encapsulation: Tunnel encapsulation config. This property only applies in CLIENT
            mode. It is auto-populated from the L2VPNSessionData.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.enabled = enabled
        self.transport_tunnels = transport_tunnels
        self.tunnel_encapsulation = tunnel_encapsulation
        VapiStruct.__init__(self)


L2VPNSession._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.l2_VPN_session', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'enabled': type.OptionalType(type.BooleanType()),
        'transport_tunnels': type.OptionalType(type.ListType(type.StringType())),
        'tunnel_encapsulation': type.OptionalType(type.ReferenceType(__name__, 'L2VPNTunnelEncapsulation')),
    },
    L2VPNSession,
    False,
    None))



class L2VPNSessionData(VapiStruct):
    """
    L2VPN Session Data represents meta data necessary to create the L2VPN
    Session. It is represented by an array of peer code for each tunnel.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'description': 'description',
                            'display_name': 'display_name',
                            'enabled': 'enabled',
                            'transport_tunnels': 'transport_tunnels',
                            }

    def __init__(self,
                 description=None,
                 display_name=None,
                 enabled=None,
                 transport_tunnels=None,
                ):
        """
        :type  description: :class:`str` or ``None``
        :param description: Description of L2VPN Session
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to id if not set.
        :type  enabled: :class:`bool` or ``None``
        :param enabled: Enable to extend all the associated segments.
        :type  transport_tunnels: :class:`list` of :class:`L2VPNSessionTransportTunnelData` or ``None``
        :param transport_tunnels: List of L2VPN transport tunnel data.
        """
        self.description = description
        self.display_name = display_name
        self.enabled = enabled
        self.transport_tunnels = transport_tunnels
        VapiStruct.__init__(self)


L2VPNSessionData._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.l2_VPN_session_data', {
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'enabled': type.OptionalType(type.BooleanType()),
        'transport_tunnels': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'L2VPNSessionTransportTunnelData'))),
    },
    L2VPNSessionData,
    False,
    None))



class L2VPNSessionListResult(VapiStruct):
    """
    Paged Collection of L2VPNSession

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`L2VPNSession` or ``None``
        :param results: L2VPNSession list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


L2VPNSessionListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.l2_VPN_session_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'L2VPNSession'))),
    },
    L2VPNSessionListResult,
    False,
    None))



class L2VPNSessionPeerConfigNsxt(VapiStruct):
    """
    L2VPNSessionPeerCodes represents an array of peer code for each tunnel. The
    peer code is necessary to configure the remote end of the tunnel. Currently
    only stand-along/unmanaged edge is supported on the remote end of the
    tunnel.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "L2VPNSessionPeerConfigNsxT"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'peer_codes': 'peer_codes',
                            'alarm': 'alarm',
                            'enforcement_point_path': 'enforcement_point_path',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 peer_codes=None,
                 alarm=None,
                 enforcement_point_path=None,
                 resource_type='L2VPNSessionPeerConfigNsxT',
                ):
        """
        :type  peer_codes: :class:`list` of :class:`L2VPNSessionTransportTunnelPeerCode` or ``None``
        :param peer_codes: List of peer codes per transport tunnel.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  alarm: :class:`PolicyRuntimeAlarm` or ``None``
        :param alarm: Alarm information details.
        :type  enforcement_point_path: :class:`str` or ``None``
        :param enforcement_point_path: Policy Path referencing the enforcement point where the info is
            fetched.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`L2VPNSessionPeerConfigPerEP.RESOURCE_TYPE_L2VPNSESSIONPEERCONFIGNSXT`
        """
        self.peer_codes = peer_codes
        self.alarm = alarm
        self.enforcement_point_path = enforcement_point_path
        self._resource_type = resource_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

L2VPNSessionPeerConfigNsxt._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.l2_VPN_session_peer_config_nsxt', {
        'peer_codes': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'L2VPNSessionTransportTunnelPeerCode'))),
        'alarm': type.OptionalType(type.ReferenceType(__name__, 'PolicyRuntimeAlarm')),
        'enforcement_point_path': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
    },
    L2VPNSessionPeerConfigNsxt,
    False,
    None))



class L2VPNSessionPeerConfigPerEP(VapiStruct):
    """
    Peer config per Enforcement Point to configure the other side of the
    tunnel.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "L2VPNSessionPeerConfigPerEP"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    RESOURCE_TYPE_L2VPNSESSIONPEERCONFIGNSXT = "L2VPNSessionPeerConfigNsxT"
    """


    """



    _canonical_to_pep_names = {
                            'alarm': 'alarm',
                            'enforcement_point_path': 'enforcement_point_path',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 alarm=None,
                 enforcement_point_path=None,
                 resource_type='L2VPNSessionPeerConfigPerEP',
                ):
        """
        :type  alarm: :class:`PolicyRuntimeAlarm` or ``None``
        :param alarm: Alarm information details.
        :type  enforcement_point_path: :class:`str` or ``None``
        :param enforcement_point_path: Policy Path referencing the enforcement point where the info is
            fetched.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`L2VPNSessionPeerConfigPerEP.RESOURCE_TYPE_L2VPNSESSIONPEERCONFIGNSXT`
        """
        self.alarm = alarm
        self.enforcement_point_path = enforcement_point_path
        self._resource_type = resource_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

L2VPNSessionPeerConfigPerEP._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.l2_VPN_session_peer_config_per_EP', {
        'alarm': type.OptionalType(type.ReferenceType(__name__, 'PolicyRuntimeAlarm')),
        'enforcement_point_path': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
    },
    L2VPNSessionPeerConfigPerEP,
    False,
    None))



class L2VPNSessionStatisticsNsxt(VapiStruct):
    """
    L2VPN session statistics gives session status and traffic statistics per
    segment.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "L2VPNSessionStatisticsNsxT"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'display_name': 'display_name',
                            'tap_traffic_counters': 'tap_traffic_counters',
                            'traffic_statistics_per_segment': 'traffic_statistics_per_segment',
                            'alarm': 'alarm',
                            'enforcement_point_path': 'enforcement_point_path',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 display_name=None,
                 tap_traffic_counters=None,
                 traffic_statistics_per_segment=None,
                 alarm=None,
                 enforcement_point_path=None,
                 resource_type='L2VPNSessionStatisticsNsxT',
                ):
        """
        :type  display_name: :class:`str` or ``None``
        :param display_name: Display name of l2vpn session.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  tap_traffic_counters: :class:`list` of :class:`L2VPNTapStatistics` or ``None``
        :param tap_traffic_counters: Tunnel port traffic counters.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  traffic_statistics_per_segment: :class:`list` of :class:`L2VPNTrafficStatisticsPerSegment` or ``None``
        :param traffic_statistics_per_segment: Traffic statistics per segment.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  alarm: :class:`PolicyRuntimeAlarm` or ``None``
        :param alarm: Alarm information details.
        :type  enforcement_point_path: :class:`str` or ``None``
        :param enforcement_point_path: Policy Path referencing the enforcement point where the info is
            fetched.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`L2VPNSessionStatisticsPerEP.RESOURCE_TYPE_L2VPNSESSIONSTATISTICSNSXT`
        """
        self.display_name = display_name
        self.tap_traffic_counters = tap_traffic_counters
        self.traffic_statistics_per_segment = traffic_statistics_per_segment
        self.alarm = alarm
        self.enforcement_point_path = enforcement_point_path
        self._resource_type = resource_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

L2VPNSessionStatisticsNsxt._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.l2_VPN_session_statistics_nsxt', {
        'display_name': type.OptionalType(type.StringType()),
        'tap_traffic_counters': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'L2VPNTapStatistics'))),
        'traffic_statistics_per_segment': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'L2VPNTrafficStatisticsPerSegment'))),
        'alarm': type.OptionalType(type.ReferenceType(__name__, 'PolicyRuntimeAlarm')),
        'enforcement_point_path': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
    },
    L2VPNSessionStatisticsNsxt,
    False,
    None))



class L2VPNSessionStatisticsPerEP(VapiStruct):
    """
    L2VPN Session Statistics Per Enforcement Point.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "L2VPNSessionStatisticsPerEP"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    RESOURCE_TYPE_L2VPNSESSIONSTATISTICSNSXT = "L2VPNSessionStatisticsNsxT"
    """


    """



    _canonical_to_pep_names = {
                            'alarm': 'alarm',
                            'enforcement_point_path': 'enforcement_point_path',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 alarm=None,
                 enforcement_point_path=None,
                 resource_type='L2VPNSessionStatisticsPerEP',
                ):
        """
        :type  alarm: :class:`PolicyRuntimeAlarm` or ``None``
        :param alarm: Alarm information details.
        :type  enforcement_point_path: :class:`str` or ``None``
        :param enforcement_point_path: Policy Path referencing the enforcement point where the info is
            fetched.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`L2VPNSessionStatisticsPerEP.RESOURCE_TYPE_L2VPNSESSIONSTATISTICSNSXT`
        """
        self.alarm = alarm
        self.enforcement_point_path = enforcement_point_path
        self._resource_type = resource_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

L2VPNSessionStatisticsPerEP._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.l2_VPN_session_statistics_per_EP', {
        'alarm': type.OptionalType(type.ReferenceType(__name__, 'PolicyRuntimeAlarm')),
        'enforcement_point_path': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
    },
    L2VPNSessionStatisticsPerEP,
    False,
    None))



class L2VPNSessionStatusNsxt(VapiStruct):
    """
    L2VPN Session Status represents status on an NSX-T type of enforcement
    point.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "L2VPNSessionStatusNsxT"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    RUNTIME_STATUS_UP = "UP"
    """


    """
    RUNTIME_STATUS_DOWN = "DOWN"
    """


    """



    _canonical_to_pep_names = {
                            'display_name': 'display_name',
                            'runtime_status': 'runtime_status',
                            'transport_tunnels': 'transport_tunnels',
                            'alarm': 'alarm',
                            'enforcement_point_path': 'enforcement_point_path',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 display_name=None,
                 runtime_status=None,
                 transport_tunnels=None,
                 alarm=None,
                 enforcement_point_path=None,
                 resource_type='L2VPNSessionStatusNsxT',
                ):
        """
        :type  display_name: :class:`str` or ``None``
        :param display_name: Display name of l2vpn session.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  runtime_status: :class:`str` or ``None``
        :param runtime_status: Possible values are: 
            
            * :attr:`L2VPNSessionStatusNsxt.RUNTIME_STATUS_UP`
            * :attr:`L2VPNSessionStatusNsxt.RUNTIME_STATUS_DOWN`
            
             L2 VPN session status, specifies UP/DOWN.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  transport_tunnels: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param transport_tunnels: Transport tunnels status.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`L2VPNSessionTransportTunnelStatus`. When methods return a
            value of this class as a return value, the attribute will contain
            all the attributes defined in
            :class:`L2VPNSessionTransportTunnelStatus`.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  alarm: :class:`PolicyRuntimeAlarm` or ``None``
        :param alarm: Alarm information details.
        :type  enforcement_point_path: :class:`str` or ``None``
        :param enforcement_point_path: Policy Path referencing the enforcement point where the info is
            fetched.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`L2VPNSessionStatusPerEP.RESOURCE_TYPE_L2VPNSESSIONSTATUSNSXT`
        """
        self.display_name = display_name
        self.runtime_status = runtime_status
        self.transport_tunnels = transport_tunnels
        self.alarm = alarm
        self.enforcement_point_path = enforcement_point_path
        self._resource_type = resource_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

L2VPNSessionStatusNsxt._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.l2_VPN_session_status_nsxt', {
        'display_name': type.OptionalType(type.StringType()),
        'runtime_status': type.OptionalType(type.StringType()),
        'transport_tunnels': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'L2VPNSessionTransportTunnelStatus')]))),
        'alarm': type.OptionalType(type.ReferenceType(__name__, 'PolicyRuntimeAlarm')),
        'enforcement_point_path': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
    },
    L2VPNSessionStatusNsxt,
    False,
    None))



class L2VPNSessionStatusPerEP(VapiStruct):
    """
    L2VPN Session Status Per Enforcement Point.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "L2VPNSessionStatusPerEP"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    RESOURCE_TYPE_L2VPNSESSIONSTATUSNSXT = "L2VPNSessionStatusNsxT"
    """


    """



    _canonical_to_pep_names = {
                            'alarm': 'alarm',
                            'enforcement_point_path': 'enforcement_point_path',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 alarm=None,
                 enforcement_point_path=None,
                 resource_type='L2VPNSessionStatusPerEP',
                ):
        """
        :type  alarm: :class:`PolicyRuntimeAlarm` or ``None``
        :param alarm: Alarm information details.
        :type  enforcement_point_path: :class:`str` or ``None``
        :param enforcement_point_path: Policy Path referencing the enforcement point where the info is
            fetched.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`L2VPNSessionStatusPerEP.RESOURCE_TYPE_L2VPNSESSIONSTATUSNSXT`
        """
        self.alarm = alarm
        self.enforcement_point_path = enforcement_point_path
        self._resource_type = resource_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

L2VPNSessionStatusPerEP._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.l2_VPN_session_status_per_EP', {
        'alarm': type.OptionalType(type.ReferenceType(__name__, 'PolicyRuntimeAlarm')),
        'enforcement_point_path': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
    },
    L2VPNSessionStatusPerEP,
    False,
    None))



class L2VPNSessionTransportTunnelData(VapiStruct):
    """
    L2VPN Session Transport Tunnel Data uses a peer code which has all the
    information to create the transport tunnel.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'local_address': 'local_address',
                            'peer_address': 'peer_address',
                            'peer_code': 'peer_code',
                            }

    def __init__(self,
                 local_address=None,
                 peer_address=None,
                 peer_code=None,
                ):
        """
        :type  local_address: :class:`str` or ``None``
        :param local_address: IPv4 Address of local endpoint. format: ipv4
        :type  peer_address: :class:`str` or ``None``
        :param peer_address: IPv4 Address of Peer endpoint on remote site. format: ipv4
        :type  peer_code: :class:`str` or ``None``
        :param peer_code: Peer code represents a base64 encoded string which has all the
            configuration for tunnel. E.g local/peer ips and protocol,
            encryption algorithm, etc. Peer code also contains PSK; be careful
            when sharing or storing it.
        """
        self.local_address = local_address
        self.peer_address = peer_address
        self.peer_code = peer_code
        VapiStruct.__init__(self)


L2VPNSessionTransportTunnelData._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.l2_VPN_session_transport_tunnel_data', {
        'local_address': type.OptionalType(type.StringType()),
        'peer_address': type.OptionalType(type.StringType()),
        'peer_code': type.OptionalType(type.StringType()),
    },
    L2VPNSessionTransportTunnelData,
    False,
    None))



class L2VPNSessionTransportTunnelPeerCode(VapiStruct):
    """
    L2VPN transport tunnel peer code.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'peer_code': 'peer_code',
                            'transport_tunnel_path': 'transport_tunnel_path',
                            }

    def __init__(self,
                 peer_code=None,
                 transport_tunnel_path=None,
                ):
        """
        :type  peer_code: :class:`str` or ``None``
        :param peer_code: Peer code represents a base64 encoded string which has all the
            configuration for tunnel. E.g local/peer ips and protocol,
            encryption algorithm, etc. Peer code also contains PSK; be careful
            when sharing or storing it.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  transport_tunnel_path: :class:`str` or ``None``
        :param transport_tunnel_path: Policy Path referencing the transport tunnel.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.peer_code = peer_code
        self.transport_tunnel_path = transport_tunnel_path
        VapiStruct.__init__(self)


L2VPNSessionTransportTunnelPeerCode._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.l2_VPN_session_transport_tunnel_peer_code', {
        'peer_code': type.OptionalType(type.StringType()),
        'transport_tunnel_path': type.OptionalType(type.StringType()),
    },
    L2VPNSessionTransportTunnelPeerCode,
    False,
    None))



class L2VPNSessionTransportTunnelStatus(VapiStruct):
    """
    Transport tunnel status.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "L2VPNSessionTransportTunnelStatus"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    RESOURCE_TYPE_IPSECVPNTRANSPORTSTATUS = "IPSecVpnTransportStatus"
    """


    """



    _canonical_to_pep_names = {
                            'resource_type': 'resource_type',
                            'transport_tunnel_path': 'transport_tunnel_path',
                            }

    def __init__(self,
                 resource_type='L2VPNSessionTransportTunnelStatus',
                 transport_tunnel_path=None,
                ):
        """
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`L2VPNSessionTransportTunnelStatus.RESOURCE_TYPE_IPSECVPNTRANSPORTSTATUS`
        :type  transport_tunnel_path: :class:`str` or ``None``
        :param transport_tunnel_path: Policy path referencing Transport Tunnel.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self._resource_type = resource_type
        self.transport_tunnel_path = transport_tunnel_path
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

L2VPNSessionTransportTunnelStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.l2_VPN_session_transport_tunnel_status', {
        'resource_type': type.StringType(),
        'transport_tunnel_path': type.OptionalType(type.StringType()),
    },
    L2VPNSessionTransportTunnelStatus,
    False,
    None))



class L2VPNTapStatistics(VapiStruct):
    """
    TAP (Terminal access point) traffic statistics for L2VPN.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'bytes_in': 'bytes_in',
                            'bytes_out': 'bytes_out',
                            'packets_in': 'packets_in',
                            'packets_out': 'packets_out',
                            'packets_receive_error': 'packets_receive_error',
                            'packets_sent_error': 'packets_sent_error',
                            }

    def __init__(self,
                 bytes_in=None,
                 bytes_out=None,
                 packets_in=None,
                 packets_out=None,
                 packets_receive_error=None,
                 packets_sent_error=None,
                ):
        """
        :type  bytes_in: :class:`long` or ``None``
        :param bytes_in: Total number of incoming bytes. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  bytes_out: :class:`long` or ``None``
        :param bytes_out: Total number of outgoing bytes. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  packets_in: :class:`long` or ``None``
        :param packets_in: Total number of incoming packets. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  packets_out: :class:`long` or ``None``
        :param packets_out: Total number of outgoing packets. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  packets_receive_error: :class:`long` or ``None``
        :param packets_receive_error: Total number of incoming packets dropped. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  packets_sent_error: :class:`long` or ``None``
        :param packets_sent_error: Total number of packets dropped while sending for any reason.
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.bytes_in = bytes_in
        self.bytes_out = bytes_out
        self.packets_in = packets_in
        self.packets_out = packets_out
        self.packets_receive_error = packets_receive_error
        self.packets_sent_error = packets_sent_error
        VapiStruct.__init__(self)


L2VPNTapStatistics._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.l2_VPN_tap_statistics', {
        'bytes_in': type.OptionalType(type.IntegerType()),
        'bytes_out': type.OptionalType(type.IntegerType()),
        'packets_in': type.OptionalType(type.IntegerType()),
        'packets_out': type.OptionalType(type.IntegerType()),
        'packets_receive_error': type.OptionalType(type.IntegerType()),
        'packets_sent_error': type.OptionalType(type.IntegerType()),
    },
    L2VPNTapStatistics,
    False,
    None))



class L2VPNTrafficStatisticsPerSegment(VapiStruct):
    """
    Traffic statistics for a segment.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'bum_bytes_in': 'bum_bytes_in',
                            'bum_bytes_out': 'bum_bytes_out',
                            'bum_packets_in': 'bum_packets_in',
                            'bum_packets_out': 'bum_packets_out',
                            'bytes_in': 'bytes_in',
                            'bytes_out': 'bytes_out',
                            'packets_in': 'packets_in',
                            'packets_out': 'packets_out',
                            'packets_receive_error': 'packets_receive_error',
                            'packets_sent_error': 'packets_sent_error',
                            'segment_path': 'segment_path',
                            }

    def __init__(self,
                 bum_bytes_in=None,
                 bum_bytes_out=None,
                 bum_packets_in=None,
                 bum_packets_out=None,
                 bytes_in=None,
                 bytes_out=None,
                 packets_in=None,
                 packets_out=None,
                 packets_receive_error=None,
                 packets_sent_error=None,
                 segment_path=None,
                ):
        """
        :type  bum_bytes_in: :class:`long` or ``None``
        :param bum_bytes_in: Total number of incoming Broadcast, Unknown unicast and Multicast
            (BUM) bytes. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  bum_bytes_out: :class:`long` or ``None``
        :param bum_bytes_out: Total number of outgoing Broadcast, Unknown unicast and Multicast
            (BUM) bytes. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  bum_packets_in: :class:`long` or ``None``
        :param bum_packets_in: Total number of incoming Broadcast, Unknown unicast and Multicast
            (BUM) packets. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  bum_packets_out: :class:`long` or ``None``
        :param bum_packets_out: Total number of outgoing Broadcast, Unknown unicast and Multicast
            (BUM) packets. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  bytes_in: :class:`long` or ``None``
        :param bytes_in: Total number of incoming bytes. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  bytes_out: :class:`long` or ``None``
        :param bytes_out: Total number of outgoing bytes. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  packets_in: :class:`long` or ``None``
        :param packets_in: Total number of incoming packets. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  packets_out: :class:`long` or ``None``
        :param packets_out: Total number of outgoing packets. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  packets_receive_error: :class:`long` or ``None``
        :param packets_receive_error: Total number of incoming packets dropped. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  packets_sent_error: :class:`long` or ``None``
        :param packets_sent_error: Total number of packets dropped while sending for any reason.
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  segment_path: :class:`str` or ``None``
        :param segment_path: Policy path referencing the segment on which stats are gathered.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.bum_bytes_in = bum_bytes_in
        self.bum_bytes_out = bum_bytes_out
        self.bum_packets_in = bum_packets_in
        self.bum_packets_out = bum_packets_out
        self.bytes_in = bytes_in
        self.bytes_out = bytes_out
        self.packets_in = packets_in
        self.packets_out = packets_out
        self.packets_receive_error = packets_receive_error
        self.packets_sent_error = packets_sent_error
        self.segment_path = segment_path
        VapiStruct.__init__(self)


L2VPNTrafficStatisticsPerSegment._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.l2_VPN_traffic_statistics_per_segment', {
        'bum_bytes_in': type.OptionalType(type.IntegerType()),
        'bum_bytes_out': type.OptionalType(type.IntegerType()),
        'bum_packets_in': type.OptionalType(type.IntegerType()),
        'bum_packets_out': type.OptionalType(type.IntegerType()),
        'bytes_in': type.OptionalType(type.IntegerType()),
        'bytes_out': type.OptionalType(type.IntegerType()),
        'packets_in': type.OptionalType(type.IntegerType()),
        'packets_out': type.OptionalType(type.IntegerType()),
        'packets_receive_error': type.OptionalType(type.IntegerType()),
        'packets_sent_error': type.OptionalType(type.IntegerType()),
        'segment_path': type.OptionalType(type.StringType()),
    },
    L2VPNTrafficStatisticsPerSegment,
    False,
    None))



class L2VPNTunnelEncapsulation(VapiStruct):
    """
    L2VPN tunnel encapsulation config.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    PROTOCOL_GRE = "GRE"
    """


    """



    _canonical_to_pep_names = {
                            'local_endpoint_address': 'local_endpoint_address',
                            'peer_endpoint_address': 'peer_endpoint_address',
                            'protocol': 'protocol',
                            }

    def __init__(self,
                 local_endpoint_address=None,
                 peer_endpoint_address=None,
                 protocol=None,
                ):
        """
        :type  local_endpoint_address: :class:`str` or ``None``
        :param local_endpoint_address: IP Address of the local tunnel port. This property only applies in
            CLIENT mode. format: ipv4
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  peer_endpoint_address: :class:`str` or ``None``
        :param peer_endpoint_address: IP Address of the peer tunnel port. This property only applies in
            CLIENT mode. format: ipv4
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protocol: :class:`str` or ``None``
        :param protocol: Possible values are: 
            
            * :attr:`L2VPNTunnelEncapsulation.PROTOCOL_GRE`
            
             Encapsulation protocol used by the tunnel.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.local_endpoint_address = local_endpoint_address
        self.peer_endpoint_address = peer_endpoint_address
        self.protocol = protocol
        VapiStruct.__init__(self)


L2VPNTunnelEncapsulation._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.l2_VPN_tunnel_encapsulation', {
        'local_endpoint_address': type.OptionalType(type.StringType()),
        'peer_endpoint_address': type.OptionalType(type.StringType()),
        'protocol': type.OptionalType(type.StringType()),
    },
    L2VPNTunnelEncapsulation,
    False,
    None))



class L2Vpn(VapiStruct):
    """
    Contains information necessary to configure L2Vpn.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'enabled': 'enabled',
                            'transport_tunnels': 'transport_tunnels',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 enabled=None,
                 transport_tunnels=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  enabled: :class:`bool` or ``None``
        :param enabled: Enable to extend all the associated segments.
        :type  transport_tunnels: :class:`list` of :class:`str` or ``None``
        :param transport_tunnels: List of paths referencing transport tunnels.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.enabled = enabled
        self.transport_tunnels = transport_tunnels
        VapiStruct.__init__(self)


L2Vpn._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.l2_vpn', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'enabled': type.OptionalType(type.BooleanType()),
        'transport_tunnels': type.OptionalType(type.ListType(type.StringType())),
    },
    L2Vpn,
    False,
    None))



class L2VpnContext(VapiStruct):
    """
    L2Vpn Context provides meta-data information about the parent Tier-0.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'enable_hub': 'enable_hub',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 enable_hub=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  enable_hub: :class:`bool` or ``None``
        :param enable_hub: If enabled, the tier-0 acts as a Hub and replicates traffic
            received from peer to all other peers. If disabled, the tier-0 acts
            as a Spoke and replicates only the local.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.enable_hub = enable_hub
        VapiStruct.__init__(self)


L2VpnContext._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.l2_vpn_context', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'enable_hub': type.OptionalType(type.BooleanType()),
    },
    L2VpnContext,
    False,
    None))



class L2VpnListResult(VapiStruct):
    """
    Paged Collection of L2Vpns

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`L2Vpn` or ``None``
        :param results: L2Vpn list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


L2VpnListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.l2_vpn_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'L2Vpn'))),
    },
    L2VpnListResult,
    False,
    None))



class L2VpnPeerCodes(VapiStruct):
    """
    Get the peer_code for each tunnel to paste on the remote end of the tunnel.
    Currently only stand-along/unmanaged edge is supported on the remote end of
    the tunnel.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "L2VpnPeerCodes"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'peer_codes': 'peer_codes',
                            'enforcement_point_path': 'enforcement_point_path',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 peer_codes=None,
                 enforcement_point_path=None,
                 resource_type='L2VpnPeerCodes',
                ):
        """
        :type  peer_codes: :class:`list` of :class:`L2VpnTransportTunnelPeerCode` or ``None``
        :param peer_codes: List of peer codes per transport tunnel.
        :type  enforcement_point_path: :class:`str` or ``None``
        :param enforcement_point_path: Policy Path referencing the enforcement point to which the config
            belongs.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`L2VpnPeerConfigPerEnforcementPoint.RESOURCE_TYPE_L2VPNPEERCODES`
        """
        self.peer_codes = peer_codes
        self.enforcement_point_path = enforcement_point_path
        self._resource_type = resource_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

L2VpnPeerCodes._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.l2_vpn_peer_codes', {
        'peer_codes': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'L2VpnTransportTunnelPeerCode'))),
        'enforcement_point_path': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
    },
    L2VpnPeerCodes,
    False,
    None))



class L2VpnPeerConfigPerEnforcementPoint(VapiStruct):
    """
    Peer config per Enforcement Point to configure the other side of the
    tunnel.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "L2VpnPeerConfigPerEnforcementPoint"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    RESOURCE_TYPE_L2VPNPEERCODES = "L2VpnPeerCodes"
    """


    """



    _canonical_to_pep_names = {
                            'enforcement_point_path': 'enforcement_point_path',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 enforcement_point_path=None,
                 resource_type='L2VpnPeerConfigPerEnforcementPoint',
                ):
        """
        :type  enforcement_point_path: :class:`str` or ``None``
        :param enforcement_point_path: Policy Path referencing the enforcement point to which the config
            belongs.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`L2VpnPeerConfigPerEnforcementPoint.RESOURCE_TYPE_L2VPNPEERCODES`
        """
        self.enforcement_point_path = enforcement_point_path
        self._resource_type = resource_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

L2VpnPeerConfigPerEnforcementPoint._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.l2_vpn_peer_config_per_enforcement_point', {
        'enforcement_point_path': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
    },
    L2VpnPeerConfigPerEnforcementPoint,
    False,
    None))



class L2VpnPerSegmentTrafficStatistics(VapiStruct):
    """
    Traffic statistics for a segment.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'bum_bytes_in': 'bum_bytes_in',
                            'bum_bytes_out': 'bum_bytes_out',
                            'bum_packets_in': 'bum_packets_in',
                            'bum_packets_out': 'bum_packets_out',
                            'bytes_in': 'bytes_in',
                            'bytes_out': 'bytes_out',
                            'packets_in': 'packets_in',
                            'packets_out': 'packets_out',
                            'packets_receive_error': 'packets_receive_error',
                            'packets_sent_error': 'packets_sent_error',
                            'segment_path': 'segment_path',
                            }

    def __init__(self,
                 bum_bytes_in=None,
                 bum_bytes_out=None,
                 bum_packets_in=None,
                 bum_packets_out=None,
                 bytes_in=None,
                 bytes_out=None,
                 packets_in=None,
                 packets_out=None,
                 packets_receive_error=None,
                 packets_sent_error=None,
                 segment_path=None,
                ):
        """
        :type  bum_bytes_in: :class:`long` or ``None``
        :param bum_bytes_in: Total number of incoming Broadcast, Unknown unicast and Multicast
            (BUM) bytes. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  bum_bytes_out: :class:`long` or ``None``
        :param bum_bytes_out: Total number of outgoing Broadcast, Unknown unicast and Multicast
            (BUM) bytes. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  bum_packets_in: :class:`long` or ``None``
        :param bum_packets_in: Total number of incoming Broadcast, Unknown unicast and Multicast
            (BUM) packets. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  bum_packets_out: :class:`long` or ``None``
        :param bum_packets_out: Total number of outgoing Broadcast, Unknown unicast and Multicast
            (BUM) packets. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  bytes_in: :class:`long` or ``None``
        :param bytes_in: Total number of incoming bytes. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  bytes_out: :class:`long` or ``None``
        :param bytes_out: Total number of outgoing bytes. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  packets_in: :class:`long` or ``None``
        :param packets_in: Total number of incoming packets. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  packets_out: :class:`long` or ``None``
        :param packets_out: Total number of outgoing packets. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  packets_receive_error: :class:`long` or ``None``
        :param packets_receive_error: Total number of incoming packets dropped. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  packets_sent_error: :class:`long` or ``None``
        :param packets_sent_error: Total number of packets dropped while sending for any reason.
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  segment_path: :class:`str` or ``None``
        :param segment_path: Policy path referencing the segment on which stats are gathered.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.bum_bytes_in = bum_bytes_in
        self.bum_bytes_out = bum_bytes_out
        self.bum_packets_in = bum_packets_in
        self.bum_packets_out = bum_packets_out
        self.bytes_in = bytes_in
        self.bytes_out = bytes_out
        self.packets_in = packets_in
        self.packets_out = packets_out
        self.packets_receive_error = packets_receive_error
        self.packets_sent_error = packets_sent_error
        self.segment_path = segment_path
        VapiStruct.__init__(self)


L2VpnPerSegmentTrafficStatistics._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.l2_vpn_per_segment_traffic_statistics', {
        'bum_bytes_in': type.OptionalType(type.IntegerType()),
        'bum_bytes_out': type.OptionalType(type.IntegerType()),
        'bum_packets_in': type.OptionalType(type.IntegerType()),
        'bum_packets_out': type.OptionalType(type.IntegerType()),
        'bytes_in': type.OptionalType(type.IntegerType()),
        'bytes_out': type.OptionalType(type.IntegerType()),
        'packets_in': type.OptionalType(type.IntegerType()),
        'packets_out': type.OptionalType(type.IntegerType()),
        'packets_receive_error': type.OptionalType(type.IntegerType()),
        'packets_sent_error': type.OptionalType(type.IntegerType()),
        'segment_path': type.OptionalType(type.StringType()),
    },
    L2VpnPerSegmentTrafficStatistics,
    False,
    None))



class L2VpnSessionRemoteMacForSegment(VapiStruct):
    """
    Remote MAC addresses for logical switch.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'remote_mac_addresses': 'remote_mac_addresses',
                            'segment_path': 'segment_path',
                            }

    def __init__(self,
                 remote_mac_addresses=None,
                 segment_path=None,
                ):
        """
        :type  remote_mac_addresses: :class:`list` of :class:`str` or ``None``
        :param remote_mac_addresses: Remote Mac addresses.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  segment_path: :class:`str` or ``None``
        :param segment_path: Intent path of the segment.
        """
        self.remote_mac_addresses = remote_mac_addresses
        self.segment_path = segment_path
        VapiStruct.__init__(self)


L2VpnSessionRemoteMacForSegment._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.l2_vpn_session_remote_mac_for_segment', {
        'remote_mac_addresses': type.OptionalType(type.ListType(type.StringType())),
        'segment_path': type.OptionalType(type.StringType()),
    },
    L2VpnSessionRemoteMacForSegment,
    False,
    None))



class L2VpnSessionRemoteMacNsxt(VapiStruct):
    """
    Remote Macs of L2Vpn Session on NsxT.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "L2VpnSessionRemoteMacNsxT"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'display_name': 'display_name',
                            'remote_macs': 'remote_macs',
                            'alarm': 'alarm',
                            'enforcement_point_path': 'enforcement_point_path',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 display_name=None,
                 remote_macs=None,
                 alarm=None,
                 enforcement_point_path=None,
                 resource_type='L2VpnSessionRemoteMacNsxT',
                ):
        """
        :type  display_name: :class:`str` or ``None``
        :param display_name: Display name of L2Vpn session.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  remote_macs: :class:`list` of :class:`L2VpnSessionRemoteMacForSegment` or ``None``
        :param remote_macs: List of mac addresses of logical switches for an l2vpn session.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  alarm: :class:`PolicyRuntimeAlarm` or ``None``
        :param alarm: Alarm information details.
        :type  enforcement_point_path: :class:`str` or ``None``
        :param enforcement_point_path: Policy Path referencing the enforcement point where the info is
            fetched.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`L2VpnSessionRemoteMacPerEP.RESOURCE_TYPE_L2VPNSESSIONREMOTEMACNSXT`
        """
        self.display_name = display_name
        self.remote_macs = remote_macs
        self.alarm = alarm
        self.enforcement_point_path = enforcement_point_path
        self._resource_type = resource_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

L2VpnSessionRemoteMacNsxt._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.l2_vpn_session_remote_mac_nsxt', {
        'display_name': type.OptionalType(type.StringType()),
        'remote_macs': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'L2VpnSessionRemoteMacForSegment'))),
        'alarm': type.OptionalType(type.ReferenceType(__name__, 'PolicyRuntimeAlarm')),
        'enforcement_point_path': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
    },
    L2VpnSessionRemoteMacNsxt,
    False,
    None))



class L2VpnSessionRemoteMacPerEP(VapiStruct):
    """
    L2Vpn Session Remote Macs Per Enforcement Point.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "L2VpnSessionRemoteMacPerEP"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    RESOURCE_TYPE_L2VPNSESSIONREMOTEMACNSXT = "L2VpnSessionRemoteMacNsxT"
    """


    """



    _canonical_to_pep_names = {
                            'alarm': 'alarm',
                            'enforcement_point_path': 'enforcement_point_path',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 alarm=None,
                 enforcement_point_path=None,
                 resource_type='L2VpnSessionRemoteMacPerEP',
                ):
        """
        :type  alarm: :class:`PolicyRuntimeAlarm` or ``None``
        :param alarm: Alarm information details.
        :type  enforcement_point_path: :class:`str` or ``None``
        :param enforcement_point_path: Policy Path referencing the enforcement point where the info is
            fetched.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`L2VpnSessionRemoteMacPerEP.RESOURCE_TYPE_L2VPNSESSIONREMOTEMACNSXT`
        """
        self.alarm = alarm
        self.enforcement_point_path = enforcement_point_path
        self._resource_type = resource_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

L2VpnSessionRemoteMacPerEP._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.l2_vpn_session_remote_mac_per_EP', {
        'alarm': type.OptionalType(type.ReferenceType(__name__, 'PolicyRuntimeAlarm')),
        'enforcement_point_path': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
    },
    L2VpnSessionRemoteMacPerEP,
    False,
    None))



class L2VpnSessionStatistics(VapiStruct):
    """
    Session statistics gives VPN session status and traffic statistics per
    segment.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "L2VpnSessionStatistics"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'tap_traffic_counters': 'tap_traffic_counters',
                            'traffic_statistics_per_segment': 'traffic_statistics_per_segment',
                            'enforcement_point_path': 'enforcement_point_path',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 tap_traffic_counters=None,
                 traffic_statistics_per_segment=None,
                 enforcement_point_path=None,
                 resource_type='L2VpnSessionStatistics',
                ):
        """
        :type  tap_traffic_counters: :class:`list` of :class:`L2VpnTapTrafficStatistics` or ``None``
        :param tap_traffic_counters: Tunnel port traffic counters.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  traffic_statistics_per_segment: :class:`list` of :class:`L2VpnPerSegmentTrafficStatistics` or ``None``
        :param traffic_statistics_per_segment: Traffic statistics per segment.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  enforcement_point_path: :class:`str` or ``None``
        :param enforcement_point_path: Policy Path referencing the enforcement point wehere the statistics
            are fetched.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`L2VpnStatisticsPerEnforcementPoint.RESOURCE_TYPE_L2VPNSESSIONSTATISTICS`
        """
        self.tap_traffic_counters = tap_traffic_counters
        self.traffic_statistics_per_segment = traffic_statistics_per_segment
        self.enforcement_point_path = enforcement_point_path
        self._resource_type = resource_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

L2VpnSessionStatistics._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.l2_vpn_session_statistics', {
        'tap_traffic_counters': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'L2VpnTapTrafficStatistics'))),
        'traffic_statistics_per_segment': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'L2VpnPerSegmentTrafficStatistics'))),
        'enforcement_point_path': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
    },
    L2VpnSessionStatistics,
    False,
    None))



class L2VpnStatisticsPerEnforcementPoint(VapiStruct):
    """
    L2Vpn Statistics Per Enforcement Point.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "L2VpnStatisticsPerEnforcementPoint"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    RESOURCE_TYPE_L2VPNSESSIONSTATISTICS = "L2VpnSessionStatistics"
    """


    """



    _canonical_to_pep_names = {
                            'enforcement_point_path': 'enforcement_point_path',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 enforcement_point_path=None,
                 resource_type='L2VpnStatisticsPerEnforcementPoint',
                ):
        """
        :type  enforcement_point_path: :class:`str` or ``None``
        :param enforcement_point_path: Policy Path referencing the enforcement point wehere the statistics
            are fetched.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`L2VpnStatisticsPerEnforcementPoint.RESOURCE_TYPE_L2VPNSESSIONSTATISTICS`
        """
        self.enforcement_point_path = enforcement_point_path
        self._resource_type = resource_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

L2VpnStatisticsPerEnforcementPoint._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.l2_vpn_statistics_per_enforcement_point', {
        'enforcement_point_path': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
    },
    L2VpnStatisticsPerEnforcementPoint,
    False,
    None))



class L2VpnTapTrafficStatistics(VapiStruct):
    """
    TAP (Terminal access point) traffic statistics for L2Vpn.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'bytes_in': 'bytes_in',
                            'bytes_out': 'bytes_out',
                            'packets_in': 'packets_in',
                            'packets_out': 'packets_out',
                            'packets_receive_error': 'packets_receive_error',
                            'packets_sent_error': 'packets_sent_error',
                            }

    def __init__(self,
                 bytes_in=None,
                 bytes_out=None,
                 packets_in=None,
                 packets_out=None,
                 packets_receive_error=None,
                 packets_sent_error=None,
                ):
        """
        :type  bytes_in: :class:`long` or ``None``
        :param bytes_in: Total number of incoming bytes. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  bytes_out: :class:`long` or ``None``
        :param bytes_out: Total number of outgoing bytes. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  packets_in: :class:`long` or ``None``
        :param packets_in: Total number of incoming packets. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  packets_out: :class:`long` or ``None``
        :param packets_out: Total number of outgoing packets. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  packets_receive_error: :class:`long` or ``None``
        :param packets_receive_error: Total number of incoming packets dropped. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  packets_sent_error: :class:`long` or ``None``
        :param packets_sent_error: Total number of packets dropped while sending for any reason.
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.bytes_in = bytes_in
        self.bytes_out = bytes_out
        self.packets_in = packets_in
        self.packets_out = packets_out
        self.packets_receive_error = packets_receive_error
        self.packets_sent_error = packets_sent_error
        VapiStruct.__init__(self)


L2VpnTapTrafficStatistics._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.l2_vpn_tap_traffic_statistics', {
        'bytes_in': type.OptionalType(type.IntegerType()),
        'bytes_out': type.OptionalType(type.IntegerType()),
        'packets_in': type.OptionalType(type.IntegerType()),
        'packets_out': type.OptionalType(type.IntegerType()),
        'packets_receive_error': type.OptionalType(type.IntegerType()),
        'packets_sent_error': type.OptionalType(type.IntegerType()),
    },
    L2VpnTapTrafficStatistics,
    False,
    None))



class L2VpnTransportTunnelPeerCode(VapiStruct):
    """
    L2Vpn transport tunnel peer code.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'peer_code': 'peer_code',
                            'transport_tunnel_path': 'transport_tunnel_path',
                            }

    def __init__(self,
                 peer_code=None,
                 transport_tunnel_path=None,
                ):
        """
        :type  peer_code: :class:`str` or ``None``
        :param peer_code: Copy this code to paste on the remote end of the tunnel. This is a
            base64 encoded string which has all the configuration for tunnel.
            E.g local/remote ips and protocol, encryption algorithm, etc. Peer
            code also contains PSK; be careful when sharing or storing it.
        :type  transport_tunnel_path: :class:`str` or ``None``
        :param transport_tunnel_path: Policy path referencing the transport tunnel.
        """
        self.peer_code = peer_code
        self.transport_tunnel_path = transport_tunnel_path
        VapiStruct.__init__(self)


L2VpnTransportTunnelPeerCode._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.l2_vpn_transport_tunnel_peer_code', {
        'peer_code': type.OptionalType(type.StringType()),
        'transport_tunnel_path': type.OptionalType(type.StringType()),
    },
    L2VpnTransportTunnelPeerCode,
    False,
    None))



class L3Vpn(VapiStruct):
    """
    Contains information necessary to configure IPSec VPN.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    DH_GROUPS_GROUP2 = "GROUP2"
    """


    """
    DH_GROUPS_GROUP5 = "GROUP5"
    """


    """
    DH_GROUPS_GROUP14 = "GROUP14"
    """


    """
    DH_GROUPS_GROUP15 = "GROUP15"
    """


    """
    DH_GROUPS_GROUP16 = "GROUP16"
    """


    """
    IKE_DIGEST_ALGORITHMS_SHA1 = "SHA1"
    """


    """
    IKE_DIGEST_ALGORITHMS_SHA2_256 = "SHA2_256"
    """


    """
    IKE_ENCRYPTION_ALGORITHMS_128 = "AES_128"
    """


    """
    IKE_ENCRYPTION_ALGORITHMS_256 = "AES_256"
    """


    """
    IKE_ENCRYPTION_ALGORITHMS_GCM_128 = "AES_GCM_128"
    """


    """
    IKE_ENCRYPTION_ALGORITHMS_GCM_192 = "AES_GCM_192"
    """


    """
    IKE_ENCRYPTION_ALGORITHMS_GCM_256 = "AES_GCM_256"
    """


    """
    IKE_VERSION_V1 = "IKE_V1"
    """


    """
    IKE_VERSION_V2 = "IKE_V2"
    """


    """
    IKE_VERSION_FLEX = "IKE_FLEX"
    """


    """
    TUNNEL_DIGEST_ALGORITHMS_SHA1 = "SHA1"
    """


    """
    TUNNEL_DIGEST_ALGORITHMS_SHA2_256 = "SHA2_256"
    """


    """
    TUNNEL_ENCRYPTION_ALGORITHMS_128 = "AES_128"
    """


    """
    TUNNEL_ENCRYPTION_ALGORITHMS_256 = "AES_256"
    """


    """
    TUNNEL_ENCRYPTION_ALGORITHMS_GCM_128 = "AES_GCM_128"
    """


    """
    TUNNEL_ENCRYPTION_ALGORITHMS_GCM_192 = "AES_GCM_192"
    """


    """
    TUNNEL_ENCRYPTION_ALGORITHMS_GCM_256 = "AES_GCM_256"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'dh_groups': 'dh_groups',
                            'enable_perfect_forward_secrecy': 'enable_perfect_forward_secrecy',
                            'enabled': 'enabled',
                            'ike_digest_algorithms': 'ike_digest_algorithms',
                            'ike_encryption_algorithms': 'ike_encryption_algorithms',
                            'ike_version': 'ike_version',
                            'l3vpn_session': 'l3vpn_session',
                            'local_address': 'local_address',
                            'passphrases': 'passphrases',
                            'remote_private_address': 'remote_private_address',
                            'remote_public_address': 'remote_public_address',
                            'tunnel_digest_algorithms': 'tunnel_digest_algorithms',
                            'tunnel_encryption_algorithms': 'tunnel_encryption_algorithms',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 dh_groups=None,
                 enable_perfect_forward_secrecy=None,
                 enabled=None,
                 ike_digest_algorithms=None,
                 ike_encryption_algorithms=None,
                 ike_version=None,
                 l3vpn_session=None,
                 local_address=None,
                 passphrases=None,
                 remote_private_address=None,
                 remote_public_address=None,
                 tunnel_digest_algorithms=None,
                 tunnel_encryption_algorithms=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  dh_groups: :class:`list` of :class:`str` or ``None``
        :param dh_groups: Possible values are: 
            
            * :attr:`L3Vpn.DH_GROUPS_GROUP2`
            * :attr:`L3Vpn.DH_GROUPS_GROUP5`
            * :attr:`L3Vpn.DH_GROUPS_GROUP14`
            * :attr:`L3Vpn.DH_GROUPS_GROUP15`
            * :attr:`L3Vpn.DH_GROUPS_GROUP16`
            
            Diffie-Hellman group to be used if PFS is enabled. Default group is
            GROUP14.
        :type  enable_perfect_forward_secrecy: :class:`bool` or ``None``
        :param enable_perfect_forward_secrecy: If true, perfect forward secrecy (PFS) is enabled.
        :type  enabled: :class:`bool` or ``None``
        :param enabled: Flag to enable L3Vpn. Default is enabled.
        :type  ike_digest_algorithms: :class:`list` of :class:`str` or ``None``
        :param ike_digest_algorithms: Possible values are: 
            
            * :attr:`L3Vpn.IKE_DIGEST_ALGORITHMS_SHA1`
            * :attr:`L3Vpn.IKE_DIGEST_ALGORITHMS_SHA2_256`
            
            Algorithm to be used for message digest during Internet Key
            Exchange(IKE) negotiation. Default is SHA2_256.
        :type  ike_encryption_algorithms: :class:`list` of :class:`str` or ``None``
        :param ike_encryption_algorithms: Possible values are: 
            
            * :attr:`L3Vpn.IKE_ENCRYPTION_ALGORITHMS__128`
            * :attr:`L3Vpn.IKE_ENCRYPTION_ALGORITHMS__256`
            * :attr:`L3Vpn.IKE_ENCRYPTION_ALGORITHMS_GCM_128`
            * :attr:`L3Vpn.IKE_ENCRYPTION_ALGORITHMS_GCM_192`
            * :attr:`L3Vpn.IKE_ENCRYPTION_ALGORITHMS_GCM_256`
            
            Algorithm to be used during Internet Key Exchange(IKE) negotiation.
            Default is AES_128.
        :type  ike_version: :class:`str` or ``None``
        :param ike_version: Possible values are: 
            
            * :attr:`L3Vpn.IKE_VERSION_V1`
            * :attr:`L3Vpn.IKE_VERSION_V2`
            * :attr:`L3Vpn.IKE_VERSION_FLEX`
            
            IKE protocol version to be used. IKE-Flex will initiate IKE-V2 and
            responds to both IKE-V1 and IKE-V2.
        :type  l3vpn_session: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param l3vpn_session: L3Vpn Session
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`L3VpnSession`. When methods return a value of this class as
            a return value, the attribute will contain all the attributes
            defined in :class:`L3VpnSession`.
        :type  local_address: :class:`str` or ``None``
        :param local_address: IPv4 address of local gateway format: ipv4
        :type  passphrases: :class:`list` of :class:`str` or ``None``
        :param passphrases: List of IPSec pre-shared keys used for IPSec authentication. If not
            specified, the older passphrase values are retained if there are
            any.
        :type  remote_private_address: :class:`str` or ``None``
        :param remote_private_address: This field is used to resolve conflicts in case of a remote site
            being behind NAT as remote public ip address is not enough. If it
            is not the case the remote public address should be provided here.
            If not provided, the value of this field is set to
            remote_public_address.
        :type  remote_public_address: :class:`str` or ``None``
        :param remote_public_address: Public IPv4 address of remote gateway format: ipv4
        :type  tunnel_digest_algorithms: :class:`list` of :class:`str` or ``None``
        :param tunnel_digest_algorithms: Possible values are: 
            
            * :attr:`L3Vpn.TUNNEL_DIGEST_ALGORITHMS_SHA1`
            * :attr:`L3Vpn.TUNNEL_DIGEST_ALGORITHMS_SHA2_256`
            
            Algorithm to be used for message digest during tunnel
            establishment. Default algorithm is empty.
        :type  tunnel_encryption_algorithms: :class:`list` of :class:`str` or ``None``
        :param tunnel_encryption_algorithms: Possible values are: 
            
            * :attr:`L3Vpn.TUNNEL_ENCRYPTION_ALGORITHMS__128`
            * :attr:`L3Vpn.TUNNEL_ENCRYPTION_ALGORITHMS__256`
            * :attr:`L3Vpn.TUNNEL_ENCRYPTION_ALGORITHMS_GCM_128`
            * :attr:`L3Vpn.TUNNEL_ENCRYPTION_ALGORITHMS_GCM_192`
            * :attr:`L3Vpn.TUNNEL_ENCRYPTION_ALGORITHMS_GCM_256`
            
            Encryption algorithm to encrypt/decrypt the messages exchanged
            between IPSec VPN initiator and responder during tunnel
            negotiation. Default is AES_GCM_128.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.dh_groups = dh_groups
        self.enable_perfect_forward_secrecy = enable_perfect_forward_secrecy
        self.enabled = enabled
        self.ike_digest_algorithms = ike_digest_algorithms
        self.ike_encryption_algorithms = ike_encryption_algorithms
        self.ike_version = ike_version
        self.l3vpn_session = l3vpn_session
        self.local_address = local_address
        self.passphrases = passphrases
        self.remote_private_address = remote_private_address
        self.remote_public_address = remote_public_address
        self.tunnel_digest_algorithms = tunnel_digest_algorithms
        self.tunnel_encryption_algorithms = tunnel_encryption_algorithms
        VapiStruct.__init__(self)


L3Vpn._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.l3_vpn', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'dh_groups': type.OptionalType(type.ListType(type.StringType())),
        'enable_perfect_forward_secrecy': type.OptionalType(type.BooleanType()),
        'enabled': type.OptionalType(type.BooleanType()),
        'ike_digest_algorithms': type.OptionalType(type.ListType(type.StringType())),
        'ike_encryption_algorithms': type.OptionalType(type.ListType(type.StringType())),
        'ike_version': type.OptionalType(type.StringType()),
        'l3vpn_session': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'L3VpnSession')])),
        'local_address': type.OptionalType(type.StringType()),
        'passphrases': type.OptionalType(type.ListType(type.StringType())),
        'remote_private_address': type.OptionalType(type.StringType()),
        'remote_public_address': type.OptionalType(type.StringType()),
        'tunnel_digest_algorithms': type.OptionalType(type.ListType(type.StringType())),
        'tunnel_encryption_algorithms': type.OptionalType(type.ListType(type.StringType())),
    },
    L3Vpn,
    False,
    None))



class L3VpnContext(VapiStruct):
    """
    L3Vpn Context provides the configuration context that different L3Vpns can
    consume.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    IKE_LOG_LEVEL_DEBUG = "DEBUG"
    """


    """
    IKE_LOG_LEVEL_INFO = "INFO"
    """


    """
    IKE_LOG_LEVEL_WARN = "WARN"
    """


    """
    IKE_LOG_LEVEL_ERROR = "ERROR"
    """


    """
    IKE_LOG_LEVEL_EMERGENCY = "EMERGENCY"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'available_local_addresses': 'available_local_addresses',
                            'bypass_rules': 'bypass_rules',
                            'enabled': 'enabled',
                            'ike_log_level': 'ike_log_level',
                            'label': 'label',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 available_local_addresses=None,
                 bypass_rules=None,
                 enabled=None,
                 ike_log_level=None,
                 label=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  available_local_addresses: :class:`list` of :class:`PolicyIPAddressInfo` or ``None``
        :param available_local_addresses: Local gateway IPv4 addresses available for configuration of each
            L3Vpn.
        :type  bypass_rules: :class:`list` of :class:`L3VpnRule` or ``None``
        :param bypass_rules: Bypass L3Vpn rules that will be shared across L3Vpns. Only Bypass
            action is supported on these L3Vpn rules.
        :type  enabled: :class:`bool` or ``None``
        :param enabled: If true, enable L3Vpn Service for given tier-0. Enabling/disabling
            this service affects all L3Vpns under the given tier-0.
        :type  ike_log_level: :class:`str` or ``None``
        :param ike_log_level: Possible values are: 
            
            * :attr:`L3VpnContext.IKE_LOG_LEVEL_DEBUG`
            * :attr:`L3VpnContext.IKE_LOG_LEVEL_INFO`
            * :attr:`L3VpnContext.IKE_LOG_LEVEL_WARN`
            * :attr:`L3VpnContext.IKE_LOG_LEVEL_ERROR`
            * :attr:`L3VpnContext.IKE_LOG_LEVEL_EMERGENCY`
            
             Log level for internet key exchange (IKE).
        :type  label: :class:`str` or ``None``
        :param label: Policy path referencing Label. A label is used as a mechanism to
            group route-based L3Vpns in order to apply edge firewall rules on
            members' VTIs.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.available_local_addresses = available_local_addresses
        self.bypass_rules = bypass_rules
        self.enabled = enabled
        self.ike_log_level = ike_log_level
        self.label = label
        VapiStruct.__init__(self)


L3VpnContext._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.l3_vpn_context', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'available_local_addresses': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyIPAddressInfo'))),
        'bypass_rules': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'L3VpnRule'))),
        'enabled': type.OptionalType(type.BooleanType()),
        'ike_log_level': type.OptionalType(type.StringType()),
        'label': type.OptionalType(type.StringType()),
    },
    L3VpnContext,
    False,
    None))



class L3VpnListResult(VapiStruct):
    """
    Paged Collection of L3Vpns

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`L3Vpn` or ``None``
        :param results: L3Vpn list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


L3VpnListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.l3_vpn_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'L3Vpn'))),
    },
    L3VpnListResult,
    False,
    None))



class L3VpnPeerConfigRequestParameters(VapiStruct):
    """
    Peer Config Request parameters that represents an enforcement point path. A
    request to get the Peer config for an L3Vpn can be parameterized with this
    path and will be evaluted as follows: - no enforcement point path
    specified: the request is evaluated on all enforcement points. -
    {enforcement_point_path}: the request is evaluated only on the given
    enforcement point.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'enforcement_point_path': 'enforcement_point_path',
                            }

    def __init__(self,
                 enforcement_point_path=None,
                ):
        """
        :type  enforcement_point_path: :class:`str` or ``None``
        :param enforcement_point_path: enforcement point path, forward slashes must be escaped using %2F.
        """
        self.enforcement_point_path = enforcement_point_path
        VapiStruct.__init__(self)


L3VpnPeerConfigRequestParameters._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.l3_vpn_peer_config_request_parameters', {
        'enforcement_point_path': type.OptionalType(type.StringType()),
    },
    L3VpnPeerConfigRequestParameters,
    False,
    None))



class L3VpnRule(VapiStruct):
    """
    For policy-based L3Vpn sessions, a rule specifies as its action the vpn
    tunnel to be used for transit traffic that meets the rule's match criteria.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    ACTION_PROTECT = "PROTECT"
    """


    """
    ACTION_BYPASS = "BYPASS"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'action': 'action',
                            'destinations': 'destinations',
                            'sequence_number': 'sequence_number',
                            'sources': 'sources',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 action=None,
                 destinations=None,
                 sequence_number=None,
                 sources=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  action: :class:`str` or ``None``
        :param action: Possible values are: 
            
            * :attr:`L3VpnRule.ACTION_PROTECT`
            * :attr:`L3VpnRule.ACTION_BYPASS`
            
            Action to exchange data with or without protection. PROTECT -
            Allows to exchange data with ipsec protection. Protect rules are
            defined per L3Vpn. BYPASS - Allows to exchange data without ipsec
            protection. Bypass rules are defined per L3VpnContext and affects
            all policy based L3Vpns. Bypass rules are prioritized over protect
            rules.
        :type  destinations: :class:`list` of :class:`L3VpnSubnet` or ``None``
        :param destinations: List of remote subnets used in policy-based L3Vpn.
        :type  sequence_number: :class:`long` or ``None``
        :param sequence_number: This field is used to resolve conflicts between multiple L3VpnRules
            associated with a single L3Vpn or L3VpnContext. format: int32
        :type  sources: :class:`list` of :class:`L3VpnSubnet` or ``None``
        :param sources: List of local subnets used in policy-based L3Vpn.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.action = action
        self.destinations = destinations
        self.sequence_number = sequence_number
        self.sources = sources
        VapiStruct.__init__(self)


L3VpnRule._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.l3_vpn_rule', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'action': type.OptionalType(type.StringType()),
        'destinations': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'L3VpnSubnet'))),
        'sequence_number': type.OptionalType(type.IntegerType()),
        'sources': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'L3VpnSubnet'))),
    },
    L3VpnRule,
    False,
    None))



class L3VpnSession(VapiStruct):
    """
    Contains information about L3Vpn session.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "L3VpnSession"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    RESOURCE_TYPE_POLICYBASEDL3VPNSESSION = "PolicyBasedL3VpnSession"
    """


    """
    RESOURCE_TYPE_ROUTEBASEDL3VPNSESSION = "RouteBasedL3VpnSession"
    """


    """



    _canonical_to_pep_names = {
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 resource_type='L3VpnSession',
                ):
        """
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`L3VpnSession.RESOURCE_TYPE_POLICYBASEDL3VPNSESSION`
            * :attr:`L3VpnSession.RESOURCE_TYPE_ROUTEBASEDL3VPNSESSION`
            
            - A Policy Based L3Vpn is a configuration in which protect rules to
            match local and remote subnet needs to be defined. Tunnel is
            established for each pair of local and remote subnet defined in
            protect rules. - A Route Based L3Vpn is more flexible, more
            powerful and recommended over policy based. IP Tunnel subnet is
            created and all traffic routed through tunnel subnet (commonly
            known as VTI) is sent over tunnel. Routes can be learned through
            BGP. A route based L3Vpn is required when using redundant L3Vpn.
        """
        self._resource_type = resource_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

L3VpnSession._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.l3_vpn_session', {
        'resource_type': type.StringType(),
    },
    L3VpnSession,
    False,
    None))



class L3VpnStatisticsPerEnforcementPoint(VapiStruct):
    """
    L3Vpn Statistics Per Enforcement Point.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "L3VpnStatisticsPerEnforcementPoint"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    RESOURCE_TYPE_IPSECVPNSESSIONSTATISTICS = "IPSecVpnSessionStatistics"
    """


    """



    _canonical_to_pep_names = {
                            'enforcement_point_path': 'enforcement_point_path',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 enforcement_point_path=None,
                 resource_type='L3VpnStatisticsPerEnforcementPoint',
                ):
        """
        :type  enforcement_point_path: :class:`str` or ``None``
        :param enforcement_point_path: Policy Path referencing the enforcement point wehere the statistics
            are fetched.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`L3VpnStatisticsPerEnforcementPoint.RESOURCE_TYPE_IPSECVPNSESSIONSTATISTICS`
        """
        self.enforcement_point_path = enforcement_point_path
        self._resource_type = resource_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

L3VpnStatisticsPerEnforcementPoint._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.l3_vpn_statistics_per_enforcement_point', {
        'enforcement_point_path': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
    },
    L3VpnStatisticsPerEnforcementPoint,
    False,
    None))



class L3VpnSubnet(VapiStruct):
    """
    Used to specify subnets in L3Vpn rule.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'subnet': 'subnet',
                            }

    def __init__(self,
                 subnet=None,
                ):
        """
        :type  subnet: :class:`str` or ``None``
        :param subnet: Subnet used in L3Vpn Rule. format: ipv4-cidr-block
        """
        self.subnet = subnet
        VapiStruct.__init__(self)


L3VpnSubnet._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.l3_vpn_subnet', {
        'subnet': type.OptionalType(type.StringType()),
    },
    L3VpnSubnet,
    False,
    None))



class L4PolicyLbPersistenceProfile(VapiStruct):
    """
    Some applications maintain state and require all relevant connections to be
    sent to the same server as the application state is not synchronized among
    servers. Persistence is enabled on a PolicyLbVirtualServer by binding a
    persistence profile to it.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "L4PolicyLbPersistenceProfile"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    PERSISTENCE_IP = "SOURCE_IP"
    """


    """



    _canonical_to_pep_names = {
                            'persistence': 'persistence',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            }

    def __init__(self,
                 persistence=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='L4PolicyLbPersistenceProfile',
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                ):
        """
        :type  persistence: :class:`str` or ``None``
        :param persistence: Possible values are: 
            
            * :attr:`L4PolicyLbPersistenceProfile.PERSISTENCE_IP`
            
            This field indicates the persistence method used for the
            PolicyLbVirtualServer. - SOURCE_IP persistence ensures all
            connections from a client (identified by IP address) are sent to
            the same backend server for a specified period. - This object is
            not required and persistence is disabled by default
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`PolicyLbPersistenceProfile.RESOURCE_TYPE_L4POLICYLBPERSISTENCEPROFILE`
            *
              :attr:`PolicyLbPersistenceProfile.RESOURCE_TYPE_L7POLICYLBPERSISTENCEPROFILE`
            *
              :attr:`PolicyLbPersistenceProfile.RESOURCE_TYPE_CUSTOMPOLICYLBPERSISTENCEPROFILE`
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.persistence = persistence
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

L4PolicyLbPersistenceProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.l4_policy_lb_persistence_profile', {
        'persistence': type.OptionalType(type.StringType()),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
    },
    L4PolicyLbPersistenceProfile,
    False,
    None))



class L4PortSetServiceEntry(VapiStruct):
    """
    L4PortSet can be specified in comma separated notation of parts. Parts of a
    L4PortSet includes single integer or range of port in hyphen notation.
    Example of a PortSet: \"22, 33-70, 44\".

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "L4PortSetServiceEntry"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    L4PROTOCOL_TCP = "TCP"
    """


    """
    L4PROTOCOL_UDP = "UDP"
    """


    """



    _canonical_to_pep_names = {
                            'destination_ports': 'destination_ports',
                            'l4_protocol': 'l4_protocol',
                            'source_ports': 'source_ports',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            }

    def __init__(self,
                 destination_ports=None,
                 l4_protocol=None,
                 source_ports=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='L4PortSetServiceEntry',
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                ):
        """
        :type  destination_ports: :class:`list` of :class:`str` or ``None``
        :param destination_ports: Number of values should not exceed 15, ranges count as 2 values.
            format: port-or-range
        :type  l4_protocol: :class:`str` or ``None``
        :param l4_protocol: Possible values are: 
            
            * :attr:`L4PortSetServiceEntry.L4PROTOCOL_TCP`
            * :attr:`L4PortSetServiceEntry.L4PROTOCOL_UDP`
        :type  source_ports: :class:`list` of :class:`str` or ``None``
        :param source_ports: Number of values should not exceed 15, ranges count as 2 values.
            format: port-or-range
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`ServiceEntry.RESOURCE_TYPE_IPPROTOCOLSERVICEENTRY`
            * :attr:`ServiceEntry.RESOURCE_TYPE_IGMPTYPESERVICEENTRY`
            * :attr:`ServiceEntry.RESOURCE_TYPE_ICMPTYPESERVICEENTRY`
            * :attr:`ServiceEntry.RESOURCE_TYPE_ALGTYPESERVICEENTRY`
            * :attr:`ServiceEntry.RESOURCE_TYPE_L4PORTSETSERVICEENTRY`
            * :attr:`ServiceEntry.RESOURCE_TYPE_ETHERTYPESERVICEENTRY`
            * :attr:`ServiceEntry.RESOURCE_TYPE_NESTEDSERVICESERVICEENTRY`
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.destination_ports = destination_ports
        self.l4_protocol = l4_protocol
        self.source_ports = source_ports
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

L4PortSetServiceEntry._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.l4_port_set_service_entry', {
        'destination_ports': type.OptionalType(type.ListType(type.StringType())),
        'l4_protocol': type.OptionalType(type.StringType()),
        'source_ports': type.OptionalType(type.ListType(type.StringType())),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
    },
    L4PortSetServiceEntry,
    False,
    None))



class L7PolicyLbPersistenceProfile(VapiStruct):
    """
    Some applications maintain state and require all relevant connections to be
    sent to the same server as the application state is not synchronized among
    servers. Persistence is enabled on a PolicyLbVirtualServer by binding a
    persistence profile to it.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "L7PolicyLbPersistenceProfile"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    PERSISTENCE_COOKIE = "COOKIE"
    """


    """



    _canonical_to_pep_names = {
                            'persistence': 'persistence',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            }

    def __init__(self,
                 persistence=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='L7PolicyLbPersistenceProfile',
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                ):
        """
        :type  persistence: :class:`str` or ``None``
        :param persistence: Possible values are: 
            
            * :attr:`L7PolicyLbPersistenceProfile.PERSISTENCE_COOKIE`
            
            This field indicates the persistence method used for the
            PolicyLbVirtualServer. - COOKIE persistence allows related client
            connections, identified by the same cookie in HTTP requests [Refer
            to HTTP Cookie for details on HTTP cookies], to be redirected to
            the same server. Load balancer does not maintain any persistence
            table for cookie persistence. Instead, it encodes the necessary
            information in the HTTP cookie value sent to client and relies on
            the client to store it and send it back in subsequent related HTTP
            requests. Hence there is no limit on the number of cookie
            persistence entries that can be supported. - This object is not
            required and persistence is disabled by default
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`PolicyLbPersistenceProfile.RESOURCE_TYPE_L4POLICYLBPERSISTENCEPROFILE`
            *
              :attr:`PolicyLbPersistenceProfile.RESOURCE_TYPE_L7POLICYLBPERSISTENCEPROFILE`
            *
              :attr:`PolicyLbPersistenceProfile.RESOURCE_TYPE_CUSTOMPOLICYLBPERSISTENCEPROFILE`
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.persistence = persistence
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

L7PolicyLbPersistenceProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.l7_policy_lb_persistence_profile', {
        'persistence': type.OptionalType(type.StringType()),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
    },
    L7PolicyLbPersistenceProfile,
    False,
    None))



class LBAccessListControl(VapiStruct):
    """
    LBAccessListControl is used to define how IP access list control can filter
    the connections from clients.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    ACTION_ALLOW = "ALLOW"
    """


    """
    ACTION_DROP = "DROP"
    """


    """



    _canonical_to_pep_names = {
                            'action': 'action',
                            'enabled': 'enabled',
                            'group_path': 'group_path',
                            }

    def __init__(self,
                 action=None,
                 enabled=None,
                 group_path=None,
                ):
        """
        :type  action: :class:`str` or ``None``
        :param action: Possible values are: 
            
            * :attr:`LBAccessListControl.ACTION_ALLOW`
            * :attr:`LBAccessListControl.ACTION_DROP`
            
            ALLOW means connections matching grouping object IP list are
            allowed and requests not matching grouping object IP list are
            dropped. DROP means connections matching grouping object IP list
            are dropped and requests not matching grouping object IP list are
            allowed.
        :type  enabled: :class:`bool` or ``None``
        :param enabled: The enabled flag indicates whether to enable access list control
            option. It is false by default.
        :type  group_path: :class:`str` or ``None``
        :param group_path: The path of grouping object which defines the IP addresses or
            ranges to match the client IP.
        """
        self.action = action
        self.enabled = enabled
        self.group_path = group_path
        VapiStruct.__init__(self)


LBAccessListControl._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_access_list_control', {
        'action': type.OptionalType(type.StringType()),
        'enabled': type.OptionalType(type.BooleanType()),
        'group_path': type.OptionalType(type.StringType()),
    },
    LBAccessListControl,
    False,
    None))



class LBActiveMonitor(VapiStruct):
    """
    All the active types of LBMonitorProfile extend from this abstract class.
    This is present for extensibility.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "LBActiveMonitor"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'fall_count': 'fall_count',
                            'interval': 'interval',
                            'monitor_port': 'monitor_port',
                            'rise_count': 'rise_count',
                            'timeout': 'timeout',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            }

    def __init__(self,
                 fall_count=None,
                 interval=None,
                 monitor_port=None,
                 rise_count=None,
                 timeout=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='LBActiveMonitor',
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                ):
        """
        :type  fall_count: :class:`long` or ``None``
        :param fall_count: Only if a healthcheck fails consecutively for a specified number of
            times, given with fall_count, to a member will the member status be
            marked DOWN. format: int64
        :type  interval: :class:`long` or ``None``
        :param interval: Active healthchecks are initiated periodically, at a configurable
            interval (in seconds), to each member of the Group. format: int64
        :type  monitor_port: :class:`long` or ``None``
        :param monitor_port: Typically, monitors perform healthchecks to Group members using the
            member IP address and pool_port. However, in some cases, customers
            prefer to run healthchecks against a different port than the pool
            member port which handles actual application traffic. In such
            cases, the port to run healthchecks against can be specified in the
            monitor_port value. For ICMP monitor, monitor_port is not required.
            format: int32
        :type  rise_count: :class:`long` or ``None``
        :param rise_count: Once a member is DOWN, a specified number of consecutive successful
            healthchecks specified by rise_count will bring the member back to
            UP state. format: int64
        :type  timeout: :class:`long` or ``None``
        :param timeout: Timeout specified in seconds. After a healthcheck is initiated, if
            it does not complete within a certain period, then also the
            healthcheck is considered to be unsuccessful. Completing a
            healthcheck within timeout means establishing a connection (TCP or
            SSL), if applicable, sending the request and receiving the
            response, all within the configured timeout. format: int64
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`LBMonitorProfile.RESOURCE_TYPE_LBTCPMONITORPROFILE`
            * :attr:`LBMonitorProfile.RESOURCE_TYPE_LBUDPMONITORPROFILE`
            * :attr:`LBMonitorProfile.RESOURCE_TYPE_LBICMPMONITORPROFILE`
            * :attr:`LBMonitorProfile.RESOURCE_TYPE_LBHTTPMONITORPROFILE`
            * :attr:`LBMonitorProfile.RESOURCE_TYPE_LBHTTPSMONITORPROFILE`
            * :attr:`LBMonitorProfile.RESOURCE_TYPE_LBPASSIVEMONITORPROFILE`
            
            There are two types of healthchecks: active and passive. Passive
            healthchecks depend on failures in actual client traffic (e.g. RST
            from server in response to a client connection) to detect that the
            server or the application is down. In case of active healthchecks,
            load balancer itself initiates new connections (or sends ICMP ping)
            to the servers periodically to check their health, completely
            independent of any data traffic. Currently, active health monitors
            are supported for HTTP, HTTPS, TCP, UDP and ICMP protocols.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.fall_count = fall_count
        self.interval = interval
        self.monitor_port = monitor_port
        self.rise_count = rise_count
        self.timeout = timeout
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

LBActiveMonitor._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_active_monitor', {
        'fall_count': type.OptionalType(type.IntegerType()),
        'interval': type.OptionalType(type.IntegerType()),
        'monitor_port': type.OptionalType(type.IntegerType()),
        'rise_count': type.OptionalType(type.IntegerType()),
        'timeout': type.OptionalType(type.IntegerType()),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
    },
    LBActiveMonitor,
    False,
    None))



class LBAppProfile(VapiStruct):
    """
    App profile.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "LBAppProfile"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    RESOURCE_TYPE_LBHTTPPROFILE = "LBHttpProfile"
    """


    """
    RESOURCE_TYPE_LBFASTTCPPROFILE = "LBFastTcpProfile"
    """


    """
    RESOURCE_TYPE_LBFASTUDPPROFILE = "LBFastUdpProfile"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='LBAppProfile',
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`LBAppProfile.RESOURCE_TYPE_LBHTTPPROFILE`
            * :attr:`LBAppProfile.RESOURCE_TYPE_LBFASTTCPPROFILE`
            * :attr:`LBAppProfile.RESOURCE_TYPE_LBFASTUDPPROFILE`
            
            An application profile can be bound to a virtual server to specify
            the application protocol characteristics. It is used to influence
            how load balancing is performed. Currently, three types of
            application profiles are supported: LBFastTCPProfile,
            LBFastUDPProfile and LBHttpProfile. LBFastTCPProfile or
            LBFastUDPProfile is typically used when the application is using a
            custom protocol or a standard protocol not supported by the load
            balancer. It is also used in cases where the user only wants L4
            load balancing mainly because L4 load balancing has much higher
            performance and scalability, and/or supports connection mirroring.
            LBHttpProfile is used for both HTTP and HTTPS applications. Though
            application rules, if bound to the virtual server, can be used to
            accomplish the same goal, LBHttpProfile is intended to simplify
            enabling certain common use cases.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

LBAppProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_app_profile', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
    },
    LBAppProfile,
    False,
    None))



class LBAppProfileListResult(VapiStruct):
    """
    Paged Collection of LBAppProfile

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param results: LBAppProfile list results
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`LBAppProfile`. When methods return a value of this class as
            a return value, the attribute will contain all the attributes
            defined in :class:`LBAppProfile`.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


LBAppProfileListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_app_profile_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'LBAppProfile')]))),
    },
    LBAppProfileListResult,
    False,
    None))



class LBClientCertificateIssuerDnCondition(VapiStruct):
    """
    Match condition for client certficate issuer DN.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    MATCH_TYPE_STARTS_WITH = "STARTS_WITH"
    """


    """
    MATCH_TYPE_ENDS_WITH = "ENDS_WITH"
    """


    """
    MATCH_TYPE_EQUALS = "EQUALS"
    """


    """
    MATCH_TYPE_CONTAINS = "CONTAINS"
    """


    """
    MATCH_TYPE_REGEX = "REGEX"
    """


    """



    _canonical_to_pep_names = {
                            'case_sensitive': 'case_sensitive',
                            'issuer_dn': 'issuer_dn',
                            'match_type': 'match_type',
                            }

    def __init__(self,
                 case_sensitive=None,
                 issuer_dn=None,
                 match_type=None,
                ):
        """
        :type  case_sensitive: :class:`bool` or ``None``
        :param case_sensitive: If true, case is significant when comparing issuer DN value.
        :type  issuer_dn: :class:`str` or ``None``
        :param issuer_dn: Value of issuer DN.
        :type  match_type: :class:`str` or ``None``
        :param match_type: Possible values are: 
            
            *
              :attr:`LBClientCertificateIssuerDnCondition.MATCH_TYPE_STARTS_WITH`
            * :attr:`LBClientCertificateIssuerDnCondition.MATCH_TYPE_ENDS_WITH`
            * :attr:`LBClientCertificateIssuerDnCondition.MATCH_TYPE_EQUALS`
            * :attr:`LBClientCertificateIssuerDnCondition.MATCH_TYPE_CONTAINS`
            * :attr:`LBClientCertificateIssuerDnCondition.MATCH_TYPE_REGEX`
            
             Match type of issuer DN.
        """
        self.case_sensitive = case_sensitive
        self.issuer_dn = issuer_dn
        self.match_type = match_type
        VapiStruct.__init__(self)


LBClientCertificateIssuerDnCondition._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_client_certificate_issuer_dn_condition', {
        'case_sensitive': type.OptionalType(type.BooleanType()),
        'issuer_dn': type.OptionalType(type.StringType()),
        'match_type': type.OptionalType(type.StringType()),
    },
    LBClientCertificateIssuerDnCondition,
    False,
    None))



class LBClientCertificateSubjectDnCondition(VapiStruct):
    """
    Match condition for client certficate subject DN.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    MATCH_TYPE_STARTS_WITH = "STARTS_WITH"
    """


    """
    MATCH_TYPE_ENDS_WITH = "ENDS_WITH"
    """


    """
    MATCH_TYPE_EQUALS = "EQUALS"
    """


    """
    MATCH_TYPE_CONTAINS = "CONTAINS"
    """


    """
    MATCH_TYPE_REGEX = "REGEX"
    """


    """



    _canonical_to_pep_names = {
                            'case_sensitive': 'case_sensitive',
                            'match_type': 'match_type',
                            'subject_dn': 'subject_dn',
                            }

    def __init__(self,
                 case_sensitive=None,
                 match_type=None,
                 subject_dn=None,
                ):
        """
        :type  case_sensitive: :class:`bool` or ``None``
        :param case_sensitive: If true, case is significant when comparing subject DN value.
        :type  match_type: :class:`str` or ``None``
        :param match_type: Possible values are: 
            
            *
              :attr:`LBClientCertificateSubjectDnCondition.MATCH_TYPE_STARTS_WITH`
            *
              :attr:`LBClientCertificateSubjectDnCondition.MATCH_TYPE_ENDS_WITH`
            * :attr:`LBClientCertificateSubjectDnCondition.MATCH_TYPE_EQUALS`
            * :attr:`LBClientCertificateSubjectDnCondition.MATCH_TYPE_CONTAINS`
            * :attr:`LBClientCertificateSubjectDnCondition.MATCH_TYPE_REGEX`
            
             Match type of subject DN.
        :type  subject_dn: :class:`str` or ``None``
        :param subject_dn: Value of subject DN.
        """
        self.case_sensitive = case_sensitive
        self.match_type = match_type
        self.subject_dn = subject_dn
        VapiStruct.__init__(self)


LBClientCertificateSubjectDnCondition._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_client_certificate_subject_dn_condition', {
        'case_sensitive': type.OptionalType(type.BooleanType()),
        'match_type': type.OptionalType(type.StringType()),
        'subject_dn': type.OptionalType(type.StringType()),
    },
    LBClientCertificateSubjectDnCondition,
    False,
    None))



class LBClientSslProfile(VapiStruct):
    """
    Client SSL profile.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    CIPHER_GROUP_LABEL_BALANCED = "BALANCED"
    """


    """
    CIPHER_GROUP_LABEL_HIGH_SECURITY = "HIGH_SECURITY"
    """


    """
    CIPHER_GROUP_LABEL_HIGH_COMPATIBILITY = "HIGH_COMPATIBILITY"
    """


    """
    CIPHER_GROUP_LABEL_CUSTOM = "CUSTOM"
    """


    """
    CIPHERS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 = "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"
    """


    """
    CIPHERS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 = "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384"
    """


    """
    CIPHERS_ECDHE_RSA_WITH_AES_256_CBC_SHA = "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA"
    """


    """
    CIPHERS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA = "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA"
    """


    """
    CIPHERS_ECDH_ECDSA_WITH_AES_256_CBC_SHA = "TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA"
    """


    """
    CIPHERS_ECDH_RSA_WITH_AES_256_CBC_SHA = "TLS_ECDH_RSA_WITH_AES_256_CBC_SHA"
    """


    """
    CIPHERS_RSA_WITH_AES_256_CBC_SHA = "TLS_RSA_WITH_AES_256_CBC_SHA"
    """


    """
    CIPHERS_RSA_WITH_AES_128_CBC_SHA = "TLS_RSA_WITH_AES_128_CBC_SHA"
    """


    """
    CIPHERS_RSA_WITH_3DES_EDE_CBC_SHA = "TLS_RSA_WITH_3DES_EDE_CBC_SHA"
    """


    """
    CIPHERS_ECDHE_RSA_WITH_AES_128_CBC_SHA = "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA"
    """


    """
    CIPHERS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 = "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256"
    """


    """
    CIPHERS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 = "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384"
    """


    """
    CIPHERS_RSA_WITH_AES_128_CBC_SHA256 = "TLS_RSA_WITH_AES_128_CBC_SHA256"
    """


    """
    CIPHERS_RSA_WITH_AES_128_GCM_SHA256 = "TLS_RSA_WITH_AES_128_GCM_SHA256"
    """


    """
    CIPHERS_RSA_WITH_AES_256_CBC_SHA256 = "TLS_RSA_WITH_AES_256_CBC_SHA256"
    """


    """
    CIPHERS_RSA_WITH_AES_256_GCM_SHA384 = "TLS_RSA_WITH_AES_256_GCM_SHA384"
    """


    """
    CIPHERS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA = "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA"
    """


    """
    CIPHERS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 = "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256"
    """


    """
    CIPHERS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 = "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256"
    """


    """
    CIPHERS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 = "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384"
    """


    """
    CIPHERS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 = "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384"
    """


    """
    CIPHERS_ECDH_ECDSA_WITH_AES_128_CBC_SHA = "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA"
    """


    """
    CIPHERS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256 = "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256"
    """


    """
    CIPHERS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 = "TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256"
    """


    """
    CIPHERS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384 = "TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384"
    """


    """
    CIPHERS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 = "TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384"
    """


    """
    CIPHERS_ECDH_RSA_WITH_AES_128_CBC_SHA = "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA"
    """


    """
    CIPHERS_ECDH_RSA_WITH_AES_128_CBC_SHA256 = "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256"
    """


    """
    CIPHERS_ECDH_RSA_WITH_AES_128_GCM_SHA256 = "TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256"
    """


    """
    CIPHERS_ECDH_RSA_WITH_AES_256_CBC_SHA384 = "TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384"
    """


    """
    CIPHERS_ECDH_RSA_WITH_AES_256_GCM_SHA384 = "TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384"
    """


    """
    PROTOCOLS_SSL_V2 = "SSL_V2"
    """


    """
    PROTOCOLS_SSL_V3 = "SSL_V3"
    """


    """
    PROTOCOLS_TLS_V1 = "TLS_V1"
    """


    """
    PROTOCOLS_TLS_V1_1 = "TLS_V1_1"
    """


    """
    PROTOCOLS_TLS_V1_2 = "TLS_V1_2"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'cipher_group_label': 'cipher_group_label',
                            'ciphers': 'ciphers',
                            'is_fips': 'is_fips',
                            'is_secure': 'is_secure',
                            'prefer_server_ciphers': 'prefer_server_ciphers',
                            'protocols': 'protocols',
                            'session_cache_enabled': 'session_cache_enabled',
                            'session_cache_timeout': 'session_cache_timeout',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 cipher_group_label=None,
                 ciphers=None,
                 is_fips=None,
                 is_secure=None,
                 prefer_server_ciphers=None,
                 protocols=None,
                 session_cache_enabled=None,
                 session_cache_timeout=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  cipher_group_label: :class:`str` or ``None``
        :param cipher_group_label: Possible values are: 
            
            * :attr:`LBClientSslProfile.CIPHER_GROUP_LABEL_BALANCED`
            * :attr:`LBClientSslProfile.CIPHER_GROUP_LABEL_HIGH_SECURITY`
            * :attr:`LBClientSslProfile.CIPHER_GROUP_LABEL_HIGH_COMPATIBILITY`
            * :attr:`LBClientSslProfile.CIPHER_GROUP_LABEL_CUSTOM`
            
             It is a label of cipher group which is mostly consumed by GUI.
        :type  ciphers: :class:`list` of :class:`str` or ``None``
        :param ciphers: Possible values are: 
            
            *
              :attr:`LBClientSslProfile.CIPHERS_ECDHE_RSA_WITH_AES_128_GCM_SHA256`
            *
              :attr:`LBClientSslProfile.CIPHERS_ECDHE_RSA_WITH_AES_256_GCM_SHA384`
            * :attr:`LBClientSslProfile.CIPHERS_ECDHE_RSA_WITH_AES_256_CBC_SHA`
            *
              :attr:`LBClientSslProfile.CIPHERS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA`
            *
              :attr:`LBClientSslProfile.CIPHERS_ECDH_ECDSA_WITH_AES_256_CBC_SHA`
            * :attr:`LBClientSslProfile.CIPHERS_ECDH_RSA_WITH_AES_256_CBC_SHA`
            * :attr:`LBClientSslProfile.CIPHERS_RSA_WITH_AES_256_CBC_SHA`
            * :attr:`LBClientSslProfile.CIPHERS_RSA_WITH_AES_128_CBC_SHA`
            * :attr:`LBClientSslProfile.CIPHERS_RSA_WITH_3DES_EDE_CBC_SHA`
            * :attr:`LBClientSslProfile.CIPHERS_ECDHE_RSA_WITH_AES_128_CBC_SHA`
            *
              :attr:`LBClientSslProfile.CIPHERS_ECDHE_RSA_WITH_AES_128_CBC_SHA256`
            *
              :attr:`LBClientSslProfile.CIPHERS_ECDHE_RSA_WITH_AES_256_CBC_SHA384`
            * :attr:`LBClientSslProfile.CIPHERS_RSA_WITH_AES_128_CBC_SHA256`
            * :attr:`LBClientSslProfile.CIPHERS_RSA_WITH_AES_128_GCM_SHA256`
            * :attr:`LBClientSslProfile.CIPHERS_RSA_WITH_AES_256_CBC_SHA256`
            * :attr:`LBClientSslProfile.CIPHERS_RSA_WITH_AES_256_GCM_SHA384`
            *
              :attr:`LBClientSslProfile.CIPHERS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA`
            *
              :attr:`LBClientSslProfile.CIPHERS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256`
            *
              :attr:`LBClientSslProfile.CIPHERS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256`
            *
              :attr:`LBClientSslProfile.CIPHERS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384`
            *
              :attr:`LBClientSslProfile.CIPHERS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384`
            *
              :attr:`LBClientSslProfile.CIPHERS_ECDH_ECDSA_WITH_AES_128_CBC_SHA`
            *
              :attr:`LBClientSslProfile.CIPHERS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256`
            *
              :attr:`LBClientSslProfile.CIPHERS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256`
            *
              :attr:`LBClientSslProfile.CIPHERS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384`
            *
              :attr:`LBClientSslProfile.CIPHERS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384`
            * :attr:`LBClientSslProfile.CIPHERS_ECDH_RSA_WITH_AES_128_CBC_SHA`
            *
              :attr:`LBClientSslProfile.CIPHERS_ECDH_RSA_WITH_AES_128_CBC_SHA256`
            *
              :attr:`LBClientSslProfile.CIPHERS_ECDH_RSA_WITH_AES_128_GCM_SHA256`
            *
              :attr:`LBClientSslProfile.CIPHERS_ECDH_RSA_WITH_AES_256_CBC_SHA384`
            *
              :attr:`LBClientSslProfile.CIPHERS_ECDH_RSA_WITH_AES_256_GCM_SHA384`
            
             Supported SSL cipher list to client side.
        :type  is_fips: :class:`bool` or ``None``
        :param is_fips: This flag is set to true when all the ciphers and protocols are
            FIPS compliant. It is set to false when one of the ciphers or
            protocols are not FIPS compliant..
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  is_secure: :class:`bool` or ``None``
        :param is_secure: This flag is set to true when all the ciphers and protocols are
            secure. It is set to false when one of the ciphers or protocols is
            insecure.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  prefer_server_ciphers: :class:`bool` or ``None``
        :param prefer_server_ciphers: During SSL handshake as part of the SSL client Hello client sends
            an ordered list of ciphers that it can support (or prefers) and
            typically server selects the first one from the top of that list it
            can also support. For Perfect Forward Secrecy(PFS), server could
            override the client's preference.
        :type  protocols: :class:`list` of :class:`str` or ``None``
        :param protocols: Possible values are: 
            
            * :attr:`LBClientSslProfile.PROTOCOLS_SSL_V2`
            * :attr:`LBClientSslProfile.PROTOCOLS_SSL_V3`
            * :attr:`LBClientSslProfile.PROTOCOLS_TLS_V1`
            * :attr:`LBClientSslProfile.PROTOCOLS_TLS_V1_1`
            * :attr:`LBClientSslProfile.PROTOCOLS_TLS_V1_2`
            
            SSL versions TLS1.1 and TLS1.2 are supported and enabled by
            default. SSLv2, SSLv3, and TLS1.0 are supported, but disabled by
            default.
        :type  session_cache_enabled: :class:`bool` or ``None``
        :param session_cache_enabled: SSL session caching allows SSL client and server to reuse
            previously negotiated security parameters avoiding the expensive
            public key operation during handshake.
        :type  session_cache_timeout: :class:`long` or ``None``
        :param session_cache_timeout: Session cache timeout specifies how long the SSL session parameters
            are held on to and can be reused. format: int64
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.cipher_group_label = cipher_group_label
        self.ciphers = ciphers
        self.is_fips = is_fips
        self.is_secure = is_secure
        self.prefer_server_ciphers = prefer_server_ciphers
        self.protocols = protocols
        self.session_cache_enabled = session_cache_enabled
        self.session_cache_timeout = session_cache_timeout
        VapiStruct.__init__(self)


LBClientSslProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_client_ssl_profile', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'cipher_group_label': type.OptionalType(type.StringType()),
        'ciphers': type.OptionalType(type.ListType(type.StringType())),
        'is_fips': type.OptionalType(type.BooleanType()),
        'is_secure': type.OptionalType(type.BooleanType()),
        'prefer_server_ciphers': type.OptionalType(type.BooleanType()),
        'protocols': type.OptionalType(type.ListType(type.StringType())),
        'session_cache_enabled': type.OptionalType(type.BooleanType()),
        'session_cache_timeout': type.OptionalType(type.IntegerType()),
    },
    LBClientSslProfile,
    False,
    None))



class LBClientSslProfileBinding(VapiStruct):
    """
    Client SSL profile binding.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    CLIENT_AUTH_REQUIRED = "REQUIRED"
    """


    """
    CLIENT_AUTH_IGNORE = "IGNORE"
    """


    """



    _canonical_to_pep_names = {
                            'certificate_chain_depth': 'certificate_chain_depth',
                            'client_auth': 'client_auth',
                            'client_auth_ca_paths': 'client_auth_ca_paths',
                            'client_auth_crl_paths': 'client_auth_crl_paths',
                            'default_certificate_path': 'default_certificate_path',
                            'sni_certificate_paths': 'sni_certificate_paths',
                            'ssl_profile_path': 'ssl_profile_path',
                            }

    def __init__(self,
                 certificate_chain_depth=None,
                 client_auth=None,
                 client_auth_ca_paths=None,
                 client_auth_crl_paths=None,
                 default_certificate_path=None,
                 sni_certificate_paths=None,
                 ssl_profile_path=None,
                ):
        """
        :type  certificate_chain_depth: :class:`long` or ``None``
        :param certificate_chain_depth: Authentication depth is used to set the verification depth in the
            client certificates chain. format: int64
        :type  client_auth: :class:`str` or ``None``
        :param client_auth: Possible values are: 
            
            * :attr:`LBClientSslProfileBinding.CLIENT_AUTH_REQUIRED`
            * :attr:`LBClientSslProfileBinding.CLIENT_AUTH_IGNORE`
            
             Client authentication mode.
        :type  client_auth_ca_paths: :class:`list` of :class:`str` or ``None``
        :param client_auth_ca_paths: If client auth type is REQUIRED, client certificate must be signed
            by one of the trusted Certificate Authorities (CAs), also referred
            to as root CAs, whose self signed certificates are specified.
        :type  client_auth_crl_paths: :class:`list` of :class:`str` or ``None``
        :param client_auth_crl_paths: A Certificate Revocation List (CRL) can be specified in the
            client-side SSL profile binding to disallow compromised client
            certificates.
        :type  default_certificate_path: :class:`str` or ``None``
        :param default_certificate_path: A default certificate should be specified which will be used if the
            server does not host multiple hostnames on the same IP address or
            if the client does not support SNI extension.
        :type  sni_certificate_paths: :class:`list` of :class:`str` or ``None``
        :param sni_certificate_paths: Client-side SSL profile binding allows multiple certificates, for
            different hostnames, to be bound to the same virtual server.
        :type  ssl_profile_path: :class:`str` or ``None``
        :param ssl_profile_path: Client SSL profile defines reusable, application-independent client
            side SSL properties.
        """
        self.certificate_chain_depth = certificate_chain_depth
        self.client_auth = client_auth
        self.client_auth_ca_paths = client_auth_ca_paths
        self.client_auth_crl_paths = client_auth_crl_paths
        self.default_certificate_path = default_certificate_path
        self.sni_certificate_paths = sni_certificate_paths
        self.ssl_profile_path = ssl_profile_path
        VapiStruct.__init__(self)


LBClientSslProfileBinding._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_client_ssl_profile_binding', {
        'certificate_chain_depth': type.OptionalType(type.IntegerType()),
        'client_auth': type.OptionalType(type.StringType()),
        'client_auth_ca_paths': type.OptionalType(type.ListType(type.StringType())),
        'client_auth_crl_paths': type.OptionalType(type.ListType(type.StringType())),
        'default_certificate_path': type.OptionalType(type.StringType()),
        'sni_certificate_paths': type.OptionalType(type.ListType(type.StringType())),
        'ssl_profile_path': type.OptionalType(type.StringType()),
    },
    LBClientSslProfileBinding,
    False,
    None))



class LBClientSslProfileListResult(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`LBClientSslProfile` or ``None``
        :param results: Paginated list of load balancer client SSL profiles
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


LBClientSslProfileListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_client_ssl_profile_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'LBClientSslProfile'))),
    },
    LBClientSslProfileListResult,
    False,
    None))



class LBConnectionDropAction(VapiStruct):
    """
    This action is used to drop the connections. There is no extra propery in
    this action. If there is no match condition specified, the connection will
    be always dropped. This action can be specified at HTTP_ACCESS or
    HTTP_FORWARDING pahse.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "LBConnectionDropAction"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'type': 'type',
                            }

    def __init__(self,
                 type='LBConnectionDropAction',
                ):
        """
        :type  type: :class:`str`
        :param type: Possible values are: 
            
            * :attr:`LBRuleAction.TYPE_LBSELECTPOOLACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPREQUESTURIREWRITEACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPREQUESTHEADERREWRITEACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPREJECTACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPREDIRECTACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPRESPONSEHEADERREWRITEACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPREQUESTHEADERDELETEACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPRESPONSEHEADERDELETEACTION`
            * :attr:`LBRuleAction.TYPE_LBVARIABLEASSIGNMENTACTION`
            * :attr:`LBRuleAction.TYPE_LBVARIABLEPERSISTENCEONACTION`
            * :attr:`LBRuleAction.TYPE_LBVARIABLEPERSISTENCELEARNACTION`
            * :attr:`LBRuleAction.TYPE_LBJWTAUTHACTION`
            * :attr:`LBRuleAction.TYPE_LBSSLMODESELECTIONACTION`
            * :attr:`LBRuleAction.TYPE_LBCONNECTIONDROPACTION`
            
             The property identifies the load balancer rule action type.
        """
        self._type = type
        VapiStruct.__init__(self)

    @property
    def type(self):
        """
        Return the discriminator value
        """
        return self._type

LBConnectionDropAction._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_connection_drop_action', {
        'type': type.StringType(),
    },
    LBConnectionDropAction,
    False,
    None))



class LBCookiePersistenceProfile(VapiStruct):
    """
    Some applications maintain state and require all relevant connections to be
    sent to the same server as the application state is not synchronized among
    servers. Persistence is enabled on a LBVirtualServer by binding a
    persistence profile to it.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "LBCookiePersistenceProfile"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    COOKIE_MODE_INSERT = "INSERT"
    """


    """
    COOKIE_MODE_PREFIX = "PREFIX"
    """


    """
    COOKIE_MODE_REWRITE = "REWRITE"
    """


    """



    _canonical_to_pep_names = {
                            'cookie_domain': 'cookie_domain',
                            'cookie_fallback': 'cookie_fallback',
                            'cookie_garble': 'cookie_garble',
                            'cookie_mode': 'cookie_mode',
                            'cookie_name': 'cookie_name',
                            'cookie_path': 'cookie_path',
                            'cookie_time': 'cookie_time',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'persistence_shared': 'persistence_shared',
                            }

    def __init__(self,
                 cookie_domain=None,
                 cookie_fallback=None,
                 cookie_garble=None,
                 cookie_mode=None,
                 cookie_name=None,
                 cookie_path=None,
                 cookie_time=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='LBCookiePersistenceProfile',
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 persistence_shared=None,
                ):
        """
        :type  cookie_domain: :class:`str` or ``None``
        :param cookie_domain: HTTP cookie domain could be configured, only available for insert
            mode.
        :type  cookie_fallback: :class:`bool` or ``None``
        :param cookie_fallback: If fallback is true, once the cookie points to a server that is
            down (i.e. admin state DISABLED or healthcheck state is DOWN), then
            a new server is selected by default to handle that request. If
            fallback is false, it will cause the request to be rejected if
            cookie points to a server.
        :type  cookie_garble: :class:`bool` or ``None``
        :param cookie_garble: If garble is set to true, cookie value (server IP and port) would
            be encrypted. If garble is set to false, cookie value would be
            plain text.
        :type  cookie_mode: :class:`str` or ``None``
        :param cookie_mode: Possible values are: 
            
            * :attr:`LBCookiePersistenceProfile.COOKIE_MODE_INSERT`
            * :attr:`LBCookiePersistenceProfile.COOKIE_MODE_PREFIX`
            * :attr:`LBCookiePersistenceProfile.COOKIE_MODE_REWRITE`
            
             Cookie persistence mode.
        :type  cookie_name: :class:`str` or ``None``
        :param cookie_name: Cookie name.
        :type  cookie_path: :class:`str` or ``None``
        :param cookie_path: HTTP cookie path could be set, only available for insert mode.
        :type  cookie_time: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param cookie_time: Both session cookie and persistence cookie are supported, if not
            specified, it's a session cookie. It expires when the browser is
            closed.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`LBCookieTime`. When methods return a value of this class as
            a return value, the attribute will contain all the attributes
            defined in :class:`LBCookieTime`.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`LBPersistenceProfile.RESOURCE_TYPE_LBSOURCEIPPERSISTENCEPROFILE`
            *
              :attr:`LBPersistenceProfile.RESOURCE_TYPE_LBCOOKIEPERSISTENCEPROFILE`
            *
              :attr:`LBPersistenceProfile.RESOURCE_TYPE_LBGENERICPERSISTENCEPROFILE`
            
             The resource_type property identifies persistence profile type.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  persistence_shared: :class:`bool` or ``None``
        :param persistence_shared: Persistence shared setting indicates that all LBVirtualServers that
            consume this LBPersistenceProfile should share the same persistence
            mechanism when enabled. Meaning, persistence entries of a client
            accessing one virtual server will also affect the same client's
            connections to a different virtual server. For example, say there
            are two virtual servers vip-ip1:80 and vip-ip1:8080 bound to the
            same Group g1 consisting of two servers (s11:80 and s12:80). By
            default, each virtual server will have its own persistence table or
            cookie. So, in the earlier example, there will be two tables
            (vip-ip1:80, p1) and (vip-ip1:8080, p1) or cookies. So, if a client
            connects to vip1:80 and later connects to vip1:8080, the second
            connection may be sent to a different server than the first. When
            persistence_shared is enabled, then the second connection will
            always connect to the same server as the original connection. For
            COOKIE persistence type, the same cookie will be shared by multiple
            virtual servers. For SOURCE_IP persistence type, the persistence
            table will be shared across virtual servers. For GENERIC
            persistence type, the persistence table will be shared across
            virtual servers which consume the same persistence profile in
            LBRule actions.
        """
        self.cookie_domain = cookie_domain
        self.cookie_fallback = cookie_fallback
        self.cookie_garble = cookie_garble
        self.cookie_mode = cookie_mode
        self.cookie_name = cookie_name
        self.cookie_path = cookie_path
        self.cookie_time = cookie_time
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.persistence_shared = persistence_shared
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

LBCookiePersistenceProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_cookie_persistence_profile', {
        'cookie_domain': type.OptionalType(type.StringType()),
        'cookie_fallback': type.OptionalType(type.BooleanType()),
        'cookie_garble': type.OptionalType(type.BooleanType()),
        'cookie_mode': type.OptionalType(type.StringType()),
        'cookie_name': type.OptionalType(type.StringType()),
        'cookie_path': type.OptionalType(type.StringType()),
        'cookie_time': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'LBCookieTime')])),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'persistence_shared': type.OptionalType(type.BooleanType()),
    },
    LBCookiePersistenceProfile,
    False,
    None))



class LBCookieTime(VapiStruct):
    """
    Cookie time.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "LBCookieTime"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    TYPE_LBSESSIONCOOKIETIME = "LBSessionCookieTime"
    """


    """
    TYPE_LBPERSISTENCECOOKIETIME = "LBPersistenceCookieTime"
    """


    """



    _canonical_to_pep_names = {
                            'type': 'type',
                            }

    def __init__(self,
                 type='LBCookieTime',
                ):
        """
        :type  type: :class:`str`
        :param type: Possible values are: 
            
            * :attr:`LBCookieTime.TYPE_LBSESSIONCOOKIETIME`
            * :attr:`LBCookieTime.TYPE_LBPERSISTENCECOOKIETIME`
            
            Both session cookie and persistence cookie are supported, Use
            LbSessionCookieTime for session cookie time setting, Use
            LbPersistenceCookieTime for persistence cookie time setting
        """
        self._type = type
        VapiStruct.__init__(self)

    @property
    def type(self):
        """
        Return the discriminator value
        """
        return self._type

LBCookieTime._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_cookie_time', {
        'type': type.StringType(),
    },
    LBCookieTime,
    False,
    None))



class LBEdgeNodeUsage(VapiStruct):
    """
    The capacity contains basic information and load balancer entity usages and
    capacity for the given edge node.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "LBEdgeNodeUsage"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    FORM_FACTOR_SMALL_VIRTUAL_MACHINE = "SMALL_VIRTUAL_MACHINE"
    """


    """
    FORM_FACTOR_MEDIUM_VIRTUAL_MACHINE = "MEDIUM_VIRTUAL_MACHINE"
    """


    """
    FORM_FACTOR_LARGE_VIRTUAL_MACHINE = "LARGE_VIRTUAL_MACHINE"
    """


    """
    FORM_FACTOR_XLARGE_VIRTUAL_MACHINE = "XLARGE_VIRTUAL_MACHINE"
    """


    """
    FORM_FACTOR_PHYSICAL_MACHINE = "PHYSICAL_MACHINE"
    """


    """
    SEVERITY_GREEN = "GREEN"
    """


    """
    SEVERITY_ORANGE = "ORANGE"
    """


    """
    SEVERITY_RED = "RED"
    """


    """



    _canonical_to_pep_names = {
                            'current_large_load_balancer_count': 'current_large_load_balancer_count',
                            'current_load_balancer_credits': 'current_load_balancer_credits',
                            'current_medium_load_balancer_count': 'current_medium_load_balancer_count',
                            'current_pool_count': 'current_pool_count',
                            'current_pool_member_count': 'current_pool_member_count',
                            'current_small_load_balancer_count': 'current_small_load_balancer_count',
                            'current_virtual_server_count': 'current_virtual_server_count',
                            'current_xlarge_load_balancer_count': 'current_xlarge_load_balancer_count',
                            'edge_cluster_path': 'edge_cluster_path',
                            'form_factor': 'form_factor',
                            'load_balancer_credit_capacity': 'load_balancer_credit_capacity',
                            'pool_member_capacity': 'pool_member_capacity',
                            'remaining_large_load_balancer_count': 'remaining_large_load_balancer_count',
                            'remaining_medium_load_balancer_count': 'remaining_medium_load_balancer_count',
                            'remaining_small_load_balancer_count': 'remaining_small_load_balancer_count',
                            'remaining_xlarge_load_balancer_count': 'remaining_xlarge_load_balancer_count',
                            'severity': 'severity',
                            'usage_percentage': 'usage_percentage',
                            'node_path': 'node_path',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 current_large_load_balancer_count=None,
                 current_load_balancer_credits=None,
                 current_medium_load_balancer_count=None,
                 current_pool_count=None,
                 current_pool_member_count=None,
                 current_small_load_balancer_count=None,
                 current_virtual_server_count=None,
                 current_xlarge_load_balancer_count=None,
                 edge_cluster_path=None,
                 form_factor=None,
                 load_balancer_credit_capacity=None,
                 pool_member_capacity=None,
                 remaining_large_load_balancer_count=None,
                 remaining_medium_load_balancer_count=None,
                 remaining_small_load_balancer_count=None,
                 remaining_xlarge_load_balancer_count=None,
                 severity=None,
                 usage_percentage=None,
                 node_path=None,
                 resource_type='LBEdgeNodeUsage',
                ):
        """
        :type  current_large_load_balancer_count: :class:`long` or ``None``
        :param current_large_load_balancer_count: The count of large load balancer services configured on the node.
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  current_load_balancer_credits: :class:`long` or ``None``
        :param current_load_balancer_credits: The current load balancer credits means the current credits used on
            the node. For example, configuring a medium load balancer on a node
            consumes 10 credits. If there are 2 medium instances configured on
            a node, the current credit number is 2 \* 10 = 20. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  current_medium_load_balancer_count: :class:`long` or ``None``
        :param current_medium_load_balancer_count: The count of medium load balancer services configured on the node.
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  current_pool_count: :class:`long` or ``None``
        :param current_pool_count: The count of pools configured on the node. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  current_pool_member_count: :class:`long` or ``None``
        :param current_pool_member_count: The count of pool members configured on the node. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  current_small_load_balancer_count: :class:`long` or ``None``
        :param current_small_load_balancer_count: The count of small load balancer services configured on the node.
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  current_virtual_server_count: :class:`long` or ``None``
        :param current_virtual_server_count: The count of virtual servers configured on the node. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  current_xlarge_load_balancer_count: :class:`long` or ``None``
        :param current_xlarge_load_balancer_count: The count of xlarge load balancer services configured on the node.
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  edge_cluster_path: :class:`str` or ``None``
        :param edge_cluster_path: The path of edge cluster which contains the edge node.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  form_factor: :class:`str` or ``None``
        :param form_factor: Possible values are: 
            
            * :attr:`LBEdgeNodeUsage.FORM_FACTOR_SMALL_VIRTUAL_MACHINE`
            * :attr:`LBEdgeNodeUsage.FORM_FACTOR_MEDIUM_VIRTUAL_MACHINE`
            * :attr:`LBEdgeNodeUsage.FORM_FACTOR_LARGE_VIRTUAL_MACHINE`
            * :attr:`LBEdgeNodeUsage.FORM_FACTOR_XLARGE_VIRTUAL_MACHINE`
            * :attr:`LBEdgeNodeUsage.FORM_FACTOR_PHYSICAL_MACHINE`
            
             The form factor of the given edge node.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  load_balancer_credit_capacity: :class:`long` or ``None``
        :param load_balancer_credit_capacity: The load balancer credit capacity means the maximum credits which
            can be used for load balancer configuration for the given edge
            node. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  pool_member_capacity: :class:`long` or ``None``
        :param pool_member_capacity: Pool member capacity means maximum number of pool members which can
            be configured on the given edge node. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  remaining_large_load_balancer_count: :class:`long` or ``None``
        :param remaining_large_load_balancer_count: The remaining count of large load balancer services which can be
            configured on the given edge node. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  remaining_medium_load_balancer_count: :class:`long` or ``None``
        :param remaining_medium_load_balancer_count: The remaining count of medium load balancer services which can be
            configured on the given edge node. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  remaining_small_load_balancer_count: :class:`long` or ``None``
        :param remaining_small_load_balancer_count: The remaining count of small load balancer services which can be
            configured on the given edge node. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  remaining_xlarge_load_balancer_count: :class:`long` or ``None``
        :param remaining_xlarge_load_balancer_count: The remaining count of xlarge load balancer services which can be
            configured on the given edge node. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  severity: :class:`str` or ``None``
        :param severity: Possible values are: 
            
            * :attr:`LBEdgeNodeUsage.SEVERITY_GREEN`
            * :attr:`LBEdgeNodeUsage.SEVERITY_ORANGE`
            * :attr:`LBEdgeNodeUsage.SEVERITY_RED`
            
            The severity calculation is based on current credit usage
            percentage of load balancer for one node.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  usage_percentage: :class:`float` or ``None``
        :param usage_percentage: The usage percentage of the edge node for load balancer. The value
            is the larger value between load balancer credit usage percentage
            and pool member usage percentage for the edge node.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  node_path: :class:`str` or ``None``
        :param node_path: The property identifies the node path for load balancer node usage.
            For example,
            node_path=/infra/sites/default/enforcement-points/default
            /edge-clusters/85175e0b-4d74-461d-83e1-f3b785adef9c/edge-nodes
            /86e077c0-449f-11e9-87c8-02004eb37029.
        :type  resource_type: :class:`str`
        :param resource_type: The property identifies the load balancer node usage type.
        """
        self.current_large_load_balancer_count = current_large_load_balancer_count
        self.current_load_balancer_credits = current_load_balancer_credits
        self.current_medium_load_balancer_count = current_medium_load_balancer_count
        self.current_pool_count = current_pool_count
        self.current_pool_member_count = current_pool_member_count
        self.current_small_load_balancer_count = current_small_load_balancer_count
        self.current_virtual_server_count = current_virtual_server_count
        self.current_xlarge_load_balancer_count = current_xlarge_load_balancer_count
        self.edge_cluster_path = edge_cluster_path
        self.form_factor = form_factor
        self.load_balancer_credit_capacity = load_balancer_credit_capacity
        self.pool_member_capacity = pool_member_capacity
        self.remaining_large_load_balancer_count = remaining_large_load_balancer_count
        self.remaining_medium_load_balancer_count = remaining_medium_load_balancer_count
        self.remaining_small_load_balancer_count = remaining_small_load_balancer_count
        self.remaining_xlarge_load_balancer_count = remaining_xlarge_load_balancer_count
        self.severity = severity
        self.usage_percentage = usage_percentage
        self.node_path = node_path
        self._resource_type = resource_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

LBEdgeNodeUsage._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_edge_node_usage', {
        'current_large_load_balancer_count': type.OptionalType(type.IntegerType()),
        'current_load_balancer_credits': type.OptionalType(type.IntegerType()),
        'current_medium_load_balancer_count': type.OptionalType(type.IntegerType()),
        'current_pool_count': type.OptionalType(type.IntegerType()),
        'current_pool_member_count': type.OptionalType(type.IntegerType()),
        'current_small_load_balancer_count': type.OptionalType(type.IntegerType()),
        'current_virtual_server_count': type.OptionalType(type.IntegerType()),
        'current_xlarge_load_balancer_count': type.OptionalType(type.IntegerType()),
        'edge_cluster_path': type.OptionalType(type.StringType()),
        'form_factor': type.OptionalType(type.StringType()),
        'load_balancer_credit_capacity': type.OptionalType(type.IntegerType()),
        'pool_member_capacity': type.OptionalType(type.IntegerType()),
        'remaining_large_load_balancer_count': type.OptionalType(type.IntegerType()),
        'remaining_medium_load_balancer_count': type.OptionalType(type.IntegerType()),
        'remaining_small_load_balancer_count': type.OptionalType(type.IntegerType()),
        'remaining_xlarge_load_balancer_count': type.OptionalType(type.IntegerType()),
        'severity': type.OptionalType(type.StringType()),
        'usage_percentage': type.OptionalType(type.DoubleType()),
        'node_path': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
    },
    LBEdgeNodeUsage,
    False,
    None))



class LBFastTcpProfile(VapiStruct):
    """
    Fast TCP profile.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "LBFastTcpProfile"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'close_timeout': 'close_timeout',
                            'ha_flow_mirroring_enabled': 'ha_flow_mirroring_enabled',
                            'idle_timeout': 'idle_timeout',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            }

    def __init__(self,
                 close_timeout=None,
                 ha_flow_mirroring_enabled=None,
                 idle_timeout=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='LBFastTcpProfile',
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                ):
        """
        :type  close_timeout: :class:`long` or ``None``
        :param close_timeout: It is used to specify how long a closing TCP connection (both FINs
            received or a RST is received) should be kept for this application
            before cleaning up the connection. format: int64
        :type  ha_flow_mirroring_enabled: :class:`bool` or ``None``
        :param ha_flow_mirroring_enabled: If flow mirroring is enabled, all the flows to the bounded virtual
            server are mirrored to the standby node.
        :type  idle_timeout: :class:`long` or ``None``
        :param idle_timeout: It is used to configure how long an idle TCP connection in
            ESTABLISHED state should be kept for this application before
            cleaning up. format: int64
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`LBAppProfile.RESOURCE_TYPE_LBHTTPPROFILE`
            * :attr:`LBAppProfile.RESOURCE_TYPE_LBFASTTCPPROFILE`
            * :attr:`LBAppProfile.RESOURCE_TYPE_LBFASTUDPPROFILE`
            
            An application profile can be bound to a virtual server to specify
            the application protocol characteristics. It is used to influence
            how load balancing is performed. Currently, three types of
            application profiles are supported: LBFastTCPProfile,
            LBFastUDPProfile and LBHttpProfile. LBFastTCPProfile or
            LBFastUDPProfile is typically used when the application is using a
            custom protocol or a standard protocol not supported by the load
            balancer. It is also used in cases where the user only wants L4
            load balancing mainly because L4 load balancing has much higher
            performance and scalability, and/or supports connection mirroring.
            LBHttpProfile is used for both HTTP and HTTPS applications. Though
            application rules, if bound to the virtual server, can be used to
            accomplish the same goal, LBHttpProfile is intended to simplify
            enabling certain common use cases.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.close_timeout = close_timeout
        self.ha_flow_mirroring_enabled = ha_flow_mirroring_enabled
        self.idle_timeout = idle_timeout
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

LBFastTcpProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_fast_tcp_profile', {
        'close_timeout': type.OptionalType(type.IntegerType()),
        'ha_flow_mirroring_enabled': type.OptionalType(type.BooleanType()),
        'idle_timeout': type.OptionalType(type.IntegerType()),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
    },
    LBFastTcpProfile,
    False,
    None))



class LBFastUdpProfile(VapiStruct):
    """
    Fast UDP profile.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "LBFastUdpProfile"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'flow_mirroring_enabled': 'flow_mirroring_enabled',
                            'idle_timeout': 'idle_timeout',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            }

    def __init__(self,
                 flow_mirroring_enabled=None,
                 idle_timeout=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='LBFastUdpProfile',
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                ):
        """
        :type  flow_mirroring_enabled: :class:`bool` or ``None``
        :param flow_mirroring_enabled: If flow mirroring is enabled, all the flows to the bounded virtual
            server are mirrored to the standby node.
        :type  idle_timeout: :class:`long` or ``None``
        :param idle_timeout: Though UDP is a connectionless protocol, for the purposes of load
            balancing, all UDP packets with the same flow signature (source and
            destination IP/ports and IP protocol) received within the idle
            timeout period are considered to belong to the same connection and
            are sent to the same backend server. If no packets are received for
            idle timeout period, the connection (association between flow
            signature and the selected server) is cleaned up. format: int64
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`LBAppProfile.RESOURCE_TYPE_LBHTTPPROFILE`
            * :attr:`LBAppProfile.RESOURCE_TYPE_LBFASTTCPPROFILE`
            * :attr:`LBAppProfile.RESOURCE_TYPE_LBFASTUDPPROFILE`
            
            An application profile can be bound to a virtual server to specify
            the application protocol characteristics. It is used to influence
            how load balancing is performed. Currently, three types of
            application profiles are supported: LBFastTCPProfile,
            LBFastUDPProfile and LBHttpProfile. LBFastTCPProfile or
            LBFastUDPProfile is typically used when the application is using a
            custom protocol or a standard protocol not supported by the load
            balancer. It is also used in cases where the user only wants L4
            load balancing mainly because L4 load balancing has much higher
            performance and scalability, and/or supports connection mirroring.
            LBHttpProfile is used for both HTTP and HTTPS applications. Though
            application rules, if bound to the virtual server, can be used to
            accomplish the same goal, LBHttpProfile is intended to simplify
            enabling certain common use cases.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.flow_mirroring_enabled = flow_mirroring_enabled
        self.idle_timeout = idle_timeout
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

LBFastUdpProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_fast_udp_profile', {
        'flow_mirroring_enabled': type.OptionalType(type.BooleanType()),
        'idle_timeout': type.OptionalType(type.IntegerType()),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
    },
    LBFastUdpProfile,
    False,
    None))



class LBGenericPersistenceProfile(VapiStruct):
    """
    Some applications maintain state and require all relevant connections to be
    sent to the same server as the application state is not synchronized among
    servers. Persistence is enabled on a LBVirtualServer by binding a
    persistence profile to it. LBGenericPersistenceProfile cannot be attached
    to virtual server directly, it can be specified in LB rule actions. In HTTP
    forwarding phase, the profile can be specified in
    LBVariablePersistenceOnAction. In HTTP response rewriting phase, the
    profile can be specified in LBVariablePersistenceLearnAction.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "LBGenericPersistenceProfile"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'ha_persistence_mirroring_enabled': 'ha_persistence_mirroring_enabled',
                            'timeout': 'timeout',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'persistence_shared': 'persistence_shared',
                            }

    def __init__(self,
                 ha_persistence_mirroring_enabled=None,
                 timeout=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='LBGenericPersistenceProfile',
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 persistence_shared=None,
                ):
        """
        :type  ha_persistence_mirroring_enabled: :class:`bool` or ``None``
        :param ha_persistence_mirroring_enabled: The mirroring enabled flag is to synchronize persistence entries.
            Persistence entries are not synchronized to the HA peer by default.
        :type  timeout: :class:`long` or ``None``
        :param timeout: When all connections complete (reference count reaches 0),
            persistence entry timer is started with the expiration time.
            format: int64
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`LBPersistenceProfile.RESOURCE_TYPE_LBSOURCEIPPERSISTENCEPROFILE`
            *
              :attr:`LBPersistenceProfile.RESOURCE_TYPE_LBCOOKIEPERSISTENCEPROFILE`
            *
              :attr:`LBPersistenceProfile.RESOURCE_TYPE_LBGENERICPERSISTENCEPROFILE`
            
             The resource_type property identifies persistence profile type.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  persistence_shared: :class:`bool` or ``None``
        :param persistence_shared: Persistence shared setting indicates that all LBVirtualServers that
            consume this LBPersistenceProfile should share the same persistence
            mechanism when enabled. Meaning, persistence entries of a client
            accessing one virtual server will also affect the same client's
            connections to a different virtual server. For example, say there
            are two virtual servers vip-ip1:80 and vip-ip1:8080 bound to the
            same Group g1 consisting of two servers (s11:80 and s12:80). By
            default, each virtual server will have its own persistence table or
            cookie. So, in the earlier example, there will be two tables
            (vip-ip1:80, p1) and (vip-ip1:8080, p1) or cookies. So, if a client
            connects to vip1:80 and later connects to vip1:8080, the second
            connection may be sent to a different server than the first. When
            persistence_shared is enabled, then the second connection will
            always connect to the same server as the original connection. For
            COOKIE persistence type, the same cookie will be shared by multiple
            virtual servers. For SOURCE_IP persistence type, the persistence
            table will be shared across virtual servers. For GENERIC
            persistence type, the persistence table will be shared across
            virtual servers which consume the same persistence profile in
            LBRule actions.
        """
        self.ha_persistence_mirroring_enabled = ha_persistence_mirroring_enabled
        self.timeout = timeout
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.persistence_shared = persistence_shared
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

LBGenericPersistenceProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_generic_persistence_profile', {
        'ha_persistence_mirroring_enabled': type.OptionalType(type.BooleanType()),
        'timeout': type.OptionalType(type.IntegerType()),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'persistence_shared': type.OptionalType(type.BooleanType()),
    },
    LBGenericPersistenceProfile,
    False,
    None))



class LBHttpMonitorProfile(VapiStruct):
    """
    Active healthchecks are disabled by default and can be enabled for a server
    pool by binding a health monitor to the Group through the LBRule object.
    This represents active health monitoring over HTTP. Active healthchecks are
    initiated periodically, at a configurable interval, to each member of the
    Group. Only if a healthcheck fails consecutively for a specified number of
    times (fall_count) to a member will the member status be marked DOWN. Once
    a member is DOWN, a specified number of consecutive successful healthchecks
    (rise_count) will bring the member back to UP state. After a healthcheck is
    initiated, if it does not complete within a certain period, then also the
    healthcheck is considered to be unsuccessful. Completing a healthcheck
    within timeout means establishing a connection (TCP or SSL), if applicable,
    sending the request and receiving the response, all within the configured
    timeout.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    REQUEST_METHOD_GET = "GET"
    """


    """
    REQUEST_METHOD_OPTIONS = "OPTIONS"
    """


    """
    REQUEST_METHOD_POST = "POST"
    """


    """
    REQUEST_METHOD_HEAD = "HEAD"
    """


    """
    REQUEST_METHOD_PUT = "PUT"
    """


    """
    REQUEST_VERSION_1_0 = "HTTP_VERSION_1_0"
    """


    """
    REQUEST_VERSION_1_1 = "HTTP_VERSION_1_1"
    """


    """
    REQUEST_VERSION_2_0 = "HTTP_VERSION_2_0"
    """


    """



    _canonical_to_pep_names = {
                            'request_body': 'request_body',
                            'request_headers': 'request_headers',
                            'request_method': 'request_method',
                            'request_url': 'request_url',
                            'request_version': 'request_version',
                            'response_body': 'response_body',
                            'response_status_codes': 'response_status_codes',
                            'fall_count': 'fall_count',
                            'interval': 'interval',
                            'monitor_port': 'monitor_port',
                            'rise_count': 'rise_count',
                            'timeout': 'timeout',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            }

    def __init__(self,
                 request_body=None,
                 request_headers=None,
                 request_method=None,
                 request_url=None,
                 request_version=None,
                 response_body=None,
                 response_status_codes=None,
                 fall_count=None,
                 interval=None,
                 monitor_port=None,
                 rise_count=None,
                 timeout=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                ):
        """
        :type  request_body: :class:`str` or ``None``
        :param request_body: String to send as part of HTTP health check request body. Valid
            only for certain HTTP methods like POST.
        :type  request_headers: :class:`list` of :class:`LbHttpRequestHeader` or ``None``
        :param request_headers: Array of HTTP request headers.
        :type  request_method: :class:`str` or ``None``
        :param request_method: Possible values are: 
            
            * :attr:`LBHttpMonitorProfile.REQUEST_METHOD_GET`
            * :attr:`LBHttpMonitorProfile.REQUEST_METHOD_OPTIONS`
            * :attr:`LBHttpMonitorProfile.REQUEST_METHOD_POST`
            * :attr:`LBHttpMonitorProfile.REQUEST_METHOD_HEAD`
            * :attr:`LBHttpMonitorProfile.REQUEST_METHOD_PUT`
            
             The health check method for HTTP monitor type.
        :type  request_url: :class:`str` or ``None``
        :param request_url: For HTTP active healthchecks, the HTTP request url sent can be
            customized and can include query parameters.
        :type  request_version: :class:`str` or ``None``
        :param request_version: Possible values are: 
            
            * :attr:`LBHttpMonitorProfile.REQUEST_VERSION__1_0`
            * :attr:`LBHttpMonitorProfile.REQUEST_VERSION__1_1`
            * :attr:`LBHttpMonitorProfile.REQUEST_VERSION__2_0`
            
             HTTP request version.
        :type  response_body: :class:`str` or ``None``
        :param response_body: If HTTP response body match string (regular expressions not
            supported) is specified (using LBHttpMonitor.response_body) then
            the healthcheck HTTP response body is matched against the specified
            string and server is considered healthy only if there is a match.
            If the response body string is not specified, HTTP healthcheck is
            considered successful if the HTTP response status code is 2xx, but
            it can be configured to accept other status codes as successful.
        :type  response_status_codes: :class:`list` of :class:`long` or ``None``
        :param response_status_codes: The HTTP response status code should be a valid HTTP status code.
            format: int32
        :type  fall_count: :class:`long` or ``None``
        :param fall_count: Only if a healthcheck fails consecutively for a specified number of
            times, given with fall_count, to a member will the member status be
            marked DOWN. format: int64
        :type  interval: :class:`long` or ``None``
        :param interval: Active healthchecks are initiated periodically, at a configurable
            interval (in seconds), to each member of the Group. format: int64
        :type  monitor_port: :class:`long` or ``None``
        :param monitor_port: Typically, monitors perform healthchecks to Group members using the
            member IP address and pool_port. However, in some cases, customers
            prefer to run healthchecks against a different port than the pool
            member port which handles actual application traffic. In such
            cases, the port to run healthchecks against can be specified in the
            monitor_port value. For ICMP monitor, monitor_port is not required.
            format: int32
        :type  rise_count: :class:`long` or ``None``
        :param rise_count: Once a member is DOWN, a specified number of consecutive successful
            healthchecks specified by rise_count will bring the member back to
            UP state. format: int64
        :type  timeout: :class:`long` or ``None``
        :param timeout: Timeout specified in seconds. After a healthcheck is initiated, if
            it does not complete within a certain period, then also the
            healthcheck is considered to be unsuccessful. Completing a
            healthcheck within timeout means establishing a connection (TCP or
            SSL), if applicable, sending the request and receiving the
            response, all within the configured timeout. format: int64
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`LBMonitorProfile.RESOURCE_TYPE_LBTCPMONITORPROFILE`
            * :attr:`LBMonitorProfile.RESOURCE_TYPE_LBUDPMONITORPROFILE`
            * :attr:`LBMonitorProfile.RESOURCE_TYPE_LBICMPMONITORPROFILE`
            * :attr:`LBMonitorProfile.RESOURCE_TYPE_LBHTTPMONITORPROFILE`
            * :attr:`LBMonitorProfile.RESOURCE_TYPE_LBHTTPSMONITORPROFILE`
            * :attr:`LBMonitorProfile.RESOURCE_TYPE_LBPASSIVEMONITORPROFILE`
            
            There are two types of healthchecks: active and passive. Passive
            healthchecks depend on failures in actual client traffic (e.g. RST
            from server in response to a client connection) to detect that the
            server or the application is down. In case of active healthchecks,
            load balancer itself initiates new connections (or sends ICMP ping)
            to the servers periodically to check their health, completely
            independent of any data traffic. Currently, active health monitors
            are supported for HTTP, HTTPS, TCP, UDP and ICMP protocols.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.request_body = request_body
        self.request_headers = request_headers
        self.request_method = request_method
        self.request_url = request_url
        self.request_version = request_version
        self.response_body = response_body
        self.response_status_codes = response_status_codes
        self.fall_count = fall_count
        self.interval = interval
        self.monitor_port = monitor_port
        self.rise_count = rise_count
        self.timeout = timeout
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

LBHttpMonitorProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_http_monitor_profile', {
        'request_body': type.OptionalType(type.StringType()),
        'request_headers': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'LbHttpRequestHeader'))),
        'request_method': type.OptionalType(type.StringType()),
        'request_url': type.OptionalType(type.StringType()),
        'request_version': type.OptionalType(type.StringType()),
        'response_body': type.OptionalType(type.StringType()),
        'response_status_codes': type.OptionalType(type.ListType(type.IntegerType())),
        'fall_count': type.OptionalType(type.IntegerType()),
        'interval': type.OptionalType(type.IntegerType()),
        'monitor_port': type.OptionalType(type.IntegerType()),
        'rise_count': type.OptionalType(type.IntegerType()),
        'timeout': type.OptionalType(type.IntegerType()),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
    },
    LBHttpMonitorProfile,
    False,
    None))



class LBHttpProfile(VapiStruct):
    """
    Http profile.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "LBHttpProfile"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    XFORWARDED_FOR_INSERT = "INSERT"
    """


    """
    XFORWARDED_FOR_REPLACE = "REPLACE"
    """


    """



    _canonical_to_pep_names = {
                            'http_redirect_to': 'http_redirect_to',
                            'http_redirect_to_https': 'http_redirect_to_https',
                            'idle_timeout': 'idle_timeout',
                            'ntlm': 'ntlm',
                            'request_body_size': 'request_body_size',
                            'request_header_size': 'request_header_size',
                            'response_buffering': 'response_buffering',
                            'response_header_size': 'response_header_size',
                            'response_timeout': 'response_timeout',
                            'x_forwarded_for': 'x_forwarded_for',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            }

    def __init__(self,
                 http_redirect_to=None,
                 http_redirect_to_https=None,
                 idle_timeout=None,
                 ntlm=None,
                 request_body_size=None,
                 request_header_size=None,
                 response_buffering=None,
                 response_header_size=None,
                 response_timeout=None,
                 x_forwarded_for=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='LBHttpProfile',
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                ):
        """
        :type  http_redirect_to: :class:`str` or ``None``
        :param http_redirect_to: If a website is temporarily down or has moved, incoming requests
            for that virtual server can be temporarily redirected to a URL.
        :type  http_redirect_to_https: :class:`bool` or ``None``
        :param http_redirect_to_https: Certain secure applications may want to force communication over
            SSL, but instead of rejecting non-SSL connections, they may choose
            to redirect the client automatically to use SSL.
        :type  idle_timeout: :class:`long` or ``None``
        :param idle_timeout: It is used to specify the HTTP application idle timeout, it means
            that how long the load balancer will keep the connection idle to
            wait for the client to send the next keep-alive request. It is not
            a TCP socket setting. format: int64
        :type  ntlm: :class:`bool` or ``None``
        :param ntlm: NTLM is an authentication protocol that can be used over HTTP. If
            the flag is set to true, LB will use NTLM challenge/response
            methodology.
        :type  request_body_size: :class:`long` or ``None``
        :param request_body_size: If it is not specified, it means that request body size is
            unlimited. format: int64
        :type  request_header_size: :class:`long` or ``None``
        :param request_header_size: A request with header equal to or below this size is guaranteed to
            be processed. A request with header larger than request_header_size
            will be processed up to 32K bytes on best effort basis. format:
            int64
        :type  response_buffering: :class:`bool` or ``None``
        :param response_buffering: When buffering is disabled, the response is passed to a client
            synchronously, immediately as it is received. When buffering is
            enabled, LB receives a response from the backend server as soon as
            possible, saving it into the buffers.
        :type  response_header_size: :class:`long` or ``None``
        :param response_header_size: A response with header larger than response_header_size will be
            dropped. format: int64
        :type  response_timeout: :class:`long` or ``None``
        :param response_timeout: If server doesn’t send any packet within this time, the connection
            is closed. format: int64
        :type  x_forwarded_for: :class:`str` or ``None``
        :param x_forwarded_for: Possible values are: 
            
            * :attr:`LBHttpProfile.XFORWARDED_FOR_INSERT`
            * :attr:`LBHttpProfile.XFORWARDED_FOR_REPLACE`
            
            When X-Forwareded-For is configured, X-Forwarded-Proto and
            X-Forwarded-Port information is added automatically. The two
            additional header information can be also modified or deleted in
            load balancer rules.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`LBAppProfile.RESOURCE_TYPE_LBHTTPPROFILE`
            * :attr:`LBAppProfile.RESOURCE_TYPE_LBFASTTCPPROFILE`
            * :attr:`LBAppProfile.RESOURCE_TYPE_LBFASTUDPPROFILE`
            
            An application profile can be bound to a virtual server to specify
            the application protocol characteristics. It is used to influence
            how load balancing is performed. Currently, three types of
            application profiles are supported: LBFastTCPProfile,
            LBFastUDPProfile and LBHttpProfile. LBFastTCPProfile or
            LBFastUDPProfile is typically used when the application is using a
            custom protocol or a standard protocol not supported by the load
            balancer. It is also used in cases where the user only wants L4
            load balancing mainly because L4 load balancing has much higher
            performance and scalability, and/or supports connection mirroring.
            LBHttpProfile is used for both HTTP and HTTPS applications. Though
            application rules, if bound to the virtual server, can be used to
            accomplish the same goal, LBHttpProfile is intended to simplify
            enabling certain common use cases.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.http_redirect_to = http_redirect_to
        self.http_redirect_to_https = http_redirect_to_https
        self.idle_timeout = idle_timeout
        self.ntlm = ntlm
        self.request_body_size = request_body_size
        self.request_header_size = request_header_size
        self.response_buffering = response_buffering
        self.response_header_size = response_header_size
        self.response_timeout = response_timeout
        self.x_forwarded_for = x_forwarded_for
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

LBHttpProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_http_profile', {
        'http_redirect_to': type.OptionalType(type.StringType()),
        'http_redirect_to_https': type.OptionalType(type.BooleanType()),
        'idle_timeout': type.OptionalType(type.IntegerType()),
        'ntlm': type.OptionalType(type.BooleanType()),
        'request_body_size': type.OptionalType(type.IntegerType()),
        'request_header_size': type.OptionalType(type.IntegerType()),
        'response_buffering': type.OptionalType(type.BooleanType()),
        'response_header_size': type.OptionalType(type.IntegerType()),
        'response_timeout': type.OptionalType(type.IntegerType()),
        'x_forwarded_for': type.OptionalType(type.StringType()),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
    },
    LBHttpProfile,
    False,
    None))



class LBHttpRedirectAction(VapiStruct):
    """
    This action is used to redirect HTTP request messages to a new URL. The
    reply_status value specified in this action is used as the status code of
    HTTP response message which is sent back to client (Normally a browser).
    The HTTP status code for redirection is 3xx, for example, 301, 302, 303,
    307, etc. The redirect_url is the new URL that the HTTP request message is
    redirected to. Normally browser will send another HTTP request to the new
    URL after receiving a redirection response message. Captured variables and
    built-in variables can be used in redirect_url field. For example, to
    redirect all HTTP requests to HTTPS requests for a virtual server. We
    create an LBRule without any conditions, add an LBHttpRedirectAction to the
    rule. Set the redirect_url field of the LBHttpRedirectAction to:
    https://$_host$_request_uri And set redirect_status to \"302\", which means
    found. This rule will redirect all HTTP requests to HTTPS server port on
    the same host.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "LBHttpRedirectAction"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'redirect_status': 'redirect_status',
                            'redirect_url': 'redirect_url',
                            'type': 'type',
                            }

    def __init__(self,
                 redirect_status=None,
                 redirect_url=None,
                 type='LBHttpRedirectAction',
                ):
        """
        :type  redirect_status: :class:`str` or ``None``
        :param redirect_status: HTTP response status code.
        :type  redirect_url: :class:`str` or ``None``
        :param redirect_url: The URL that the HTTP request is redirected to.
        :type  type: :class:`str`
        :param type: Possible values are: 
            
            * :attr:`LBRuleAction.TYPE_LBSELECTPOOLACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPREQUESTURIREWRITEACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPREQUESTHEADERREWRITEACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPREJECTACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPREDIRECTACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPRESPONSEHEADERREWRITEACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPREQUESTHEADERDELETEACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPRESPONSEHEADERDELETEACTION`
            * :attr:`LBRuleAction.TYPE_LBVARIABLEASSIGNMENTACTION`
            * :attr:`LBRuleAction.TYPE_LBVARIABLEPERSISTENCEONACTION`
            * :attr:`LBRuleAction.TYPE_LBVARIABLEPERSISTENCELEARNACTION`
            * :attr:`LBRuleAction.TYPE_LBJWTAUTHACTION`
            * :attr:`LBRuleAction.TYPE_LBSSLMODESELECTIONACTION`
            * :attr:`LBRuleAction.TYPE_LBCONNECTIONDROPACTION`
            
             The property identifies the load balancer rule action type.
        """
        self.redirect_status = redirect_status
        self.redirect_url = redirect_url
        self._type = type
        VapiStruct.__init__(self)

    @property
    def type(self):
        """
        Return the discriminator value
        """
        return self._type

LBHttpRedirectAction._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_http_redirect_action', {
        'redirect_status': type.OptionalType(type.StringType()),
        'redirect_url': type.OptionalType(type.StringType()),
        'type': type.StringType(),
    },
    LBHttpRedirectAction,
    False,
    None))



class LBHttpRejectAction(VapiStruct):
    """
    This action is used to reject HTTP request messages. The specified
    reply_status value is used as the status code for the corresponding HTTP
    response message which is sent back to client (Normally a browser)
    indicating the reason it was rejected. Reference official HTTP status code
    list for your specific HTTP version to set the reply_status properly.
    LBHttpRejectAction does not support variables.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "LBHttpRejectAction"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'reply_message': 'reply_message',
                            'reply_status': 'reply_status',
                            'type': 'type',
                            }

    def __init__(self,
                 reply_message=None,
                 reply_status=None,
                 type='LBHttpRejectAction',
                ):
        """
        :type  reply_message: :class:`str` or ``None``
        :param reply_message: Response message.
        :type  reply_status: :class:`str` or ``None``
        :param reply_status: HTTP response status code.
        :type  type: :class:`str`
        :param type: Possible values are: 
            
            * :attr:`LBRuleAction.TYPE_LBSELECTPOOLACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPREQUESTURIREWRITEACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPREQUESTHEADERREWRITEACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPREJECTACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPREDIRECTACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPRESPONSEHEADERREWRITEACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPREQUESTHEADERDELETEACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPRESPONSEHEADERDELETEACTION`
            * :attr:`LBRuleAction.TYPE_LBVARIABLEASSIGNMENTACTION`
            * :attr:`LBRuleAction.TYPE_LBVARIABLEPERSISTENCEONACTION`
            * :attr:`LBRuleAction.TYPE_LBVARIABLEPERSISTENCELEARNACTION`
            * :attr:`LBRuleAction.TYPE_LBJWTAUTHACTION`
            * :attr:`LBRuleAction.TYPE_LBSSLMODESELECTIONACTION`
            * :attr:`LBRuleAction.TYPE_LBCONNECTIONDROPACTION`
            
             The property identifies the load balancer rule action type.
        """
        self.reply_message = reply_message
        self.reply_status = reply_status
        self._type = type
        VapiStruct.__init__(self)

    @property
    def type(self):
        """
        Return the discriminator value
        """
        return self._type

LBHttpRejectAction._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_http_reject_action', {
        'reply_message': type.OptionalType(type.StringType()),
        'reply_status': type.OptionalType(type.StringType()),
        'type': type.StringType(),
    },
    LBHttpRejectAction,
    False,
    None))



class LBHttpRequestBodyCondition(VapiStruct):
    """
    This condition is used to match the message body of an HTTP request.
    Typically, only HTTP POST, PATCH, or PUT requests have request body. The
    match_type field defines how body_value field is used to match the body of
    HTTP requests.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "LBHttpRequestBodyCondition"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    MATCH_TYPE_STARTS_WITH = "STARTS_WITH"
    """


    """
    MATCH_TYPE_ENDS_WITH = "ENDS_WITH"
    """


    """
    MATCH_TYPE_EQUALS = "EQUALS"
    """


    """
    MATCH_TYPE_CONTAINS = "CONTAINS"
    """


    """
    MATCH_TYPE_REGEX = "REGEX"
    """


    """



    _canonical_to_pep_names = {
                            'body_value': 'body_value',
                            'case_sensitive': 'case_sensitive',
                            'match_type': 'match_type',
                            'inverse': 'inverse',
                            'type': 'type',
                            }

    def __init__(self,
                 body_value=None,
                 case_sensitive=None,
                 match_type=None,
                 inverse=None,
                 type='LBHttpRequestBodyCondition',
                ):
        """
        :type  body_value: :class:`str` or ``None``
        :param body_value: HTTP request body
        :type  case_sensitive: :class:`bool` or ``None``
        :param case_sensitive: If true, case is significant when comparing HTTP body value.
        :type  match_type: :class:`str` or ``None``
        :param match_type: Possible values are: 
            
            * :attr:`LBHttpRequestBodyCondition.MATCH_TYPE_STARTS_WITH`
            * :attr:`LBHttpRequestBodyCondition.MATCH_TYPE_ENDS_WITH`
            * :attr:`LBHttpRequestBodyCondition.MATCH_TYPE_EQUALS`
            * :attr:`LBHttpRequestBodyCondition.MATCH_TYPE_CONTAINS`
            * :attr:`LBHttpRequestBodyCondition.MATCH_TYPE_REGEX`
            
             Match type of HTTP body
        :type  inverse: :class:`bool` or ``None``
        :param inverse: A flag to indicate whether reverse the match result of this
            condition
        :type  type: :class:`str`
        :param type: Possible values are: 
            
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTURICONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTHEADERCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTMETHODCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTURIARGUMENTSCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTVERSIONCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTCOOKIECONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTBODYCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPRESPONSEHEADERCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBTCPHEADERCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBIPHEADERCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBVARIABLECONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPSSLCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBSSLSNICONDITION`
            
             Type of load balancer rule condition
        """
        self.body_value = body_value
        self.case_sensitive = case_sensitive
        self.match_type = match_type
        self.inverse = inverse
        self._type = type
        VapiStruct.__init__(self)

    @property
    def type(self):
        """
        Return the discriminator value
        """
        return self._type

LBHttpRequestBodyCondition._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_http_request_body_condition', {
        'body_value': type.OptionalType(type.StringType()),
        'case_sensitive': type.OptionalType(type.BooleanType()),
        'match_type': type.OptionalType(type.StringType()),
        'inverse': type.OptionalType(type.BooleanType()),
        'type': type.StringType(),
    },
    LBHttpRequestBodyCondition,
    False,
    None))



class LBHttpRequestCookieCondition(VapiStruct):
    """
    This condition is used to match HTTP request messages by cookie which is a
    specific type of HTTP header. The match_type and case_sensitive define how
    to compare cookie value.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "LBHttpRequestCookieCondition"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    MATCH_TYPE_STARTS_WITH = "STARTS_WITH"
    """


    """
    MATCH_TYPE_ENDS_WITH = "ENDS_WITH"
    """


    """
    MATCH_TYPE_EQUALS = "EQUALS"
    """


    """
    MATCH_TYPE_CONTAINS = "CONTAINS"
    """


    """
    MATCH_TYPE_REGEX = "REGEX"
    """


    """



    _canonical_to_pep_names = {
                            'case_sensitive': 'case_sensitive',
                            'cookie_name': 'cookie_name',
                            'cookie_value': 'cookie_value',
                            'match_type': 'match_type',
                            'inverse': 'inverse',
                            'type': 'type',
                            }

    def __init__(self,
                 case_sensitive=None,
                 cookie_name=None,
                 cookie_value=None,
                 match_type=None,
                 inverse=None,
                 type='LBHttpRequestCookieCondition',
                ):
        """
        :type  case_sensitive: :class:`bool` or ``None``
        :param case_sensitive: If true, case is significant when comparing cookie value.
        :type  cookie_name: :class:`str` or ``None``
        :param cookie_name: Cookie name.
        :type  cookie_value: :class:`str` or ``None``
        :param cookie_value: Cookie value.
        :type  match_type: :class:`str` or ``None``
        :param match_type: Possible values are: 
            
            * :attr:`LBHttpRequestCookieCondition.MATCH_TYPE_STARTS_WITH`
            * :attr:`LBHttpRequestCookieCondition.MATCH_TYPE_ENDS_WITH`
            * :attr:`LBHttpRequestCookieCondition.MATCH_TYPE_EQUALS`
            * :attr:`LBHttpRequestCookieCondition.MATCH_TYPE_CONTAINS`
            * :attr:`LBHttpRequestCookieCondition.MATCH_TYPE_REGEX`
            
             Match type of cookie value.
        :type  inverse: :class:`bool` or ``None``
        :param inverse: A flag to indicate whether reverse the match result of this
            condition
        :type  type: :class:`str`
        :param type: Possible values are: 
            
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTURICONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTHEADERCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTMETHODCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTURIARGUMENTSCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTVERSIONCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTCOOKIECONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTBODYCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPRESPONSEHEADERCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBTCPHEADERCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBIPHEADERCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBVARIABLECONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPSSLCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBSSLSNICONDITION`
            
             Type of load balancer rule condition
        """
        self.case_sensitive = case_sensitive
        self.cookie_name = cookie_name
        self.cookie_value = cookie_value
        self.match_type = match_type
        self.inverse = inverse
        self._type = type
        VapiStruct.__init__(self)

    @property
    def type(self):
        """
        Return the discriminator value
        """
        return self._type

LBHttpRequestCookieCondition._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_http_request_cookie_condition', {
        'case_sensitive': type.OptionalType(type.BooleanType()),
        'cookie_name': type.OptionalType(type.StringType()),
        'cookie_value': type.OptionalType(type.StringType()),
        'match_type': type.OptionalType(type.StringType()),
        'inverse': type.OptionalType(type.BooleanType()),
        'type': type.StringType(),
    },
    LBHttpRequestCookieCondition,
    False,
    None))



class LBHttpRequestHeaderCondition(VapiStruct):
    """
    This condition is used to match HTTP request messages by HTTP header
    fields. HTTP header fields are components of the header section of HTTP
    request and response messages. They define the operating parameters of an
    HTTP transaction. For example, Cookie, Authorization, User-Agent, etc. One
    condition can be used to match one header field, to match multiple header
    fields, multiple conditions must be specified. The match_type field defines
    how header_value field is used to match HTTP requests. The header_name
    field does not support match types.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "LBHttpRequestHeaderCondition"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    MATCH_TYPE_STARTS_WITH = "STARTS_WITH"
    """


    """
    MATCH_TYPE_ENDS_WITH = "ENDS_WITH"
    """


    """
    MATCH_TYPE_EQUALS = "EQUALS"
    """


    """
    MATCH_TYPE_CONTAINS = "CONTAINS"
    """


    """
    MATCH_TYPE_REGEX = "REGEX"
    """


    """



    _canonical_to_pep_names = {
                            'case_sensitive': 'case_sensitive',
                            'header_name': 'header_name',
                            'header_value': 'header_value',
                            'match_type': 'match_type',
                            'inverse': 'inverse',
                            'type': 'type',
                            }

    def __init__(self,
                 case_sensitive=None,
                 header_name=None,
                 header_value=None,
                 match_type=None,
                 inverse=None,
                 type='LBHttpRequestHeaderCondition',
                ):
        """
        :type  case_sensitive: :class:`bool` or ``None``
        :param case_sensitive: If true, case is significant when comparing HTTP header value.
        :type  header_name: :class:`str` or ``None``
        :param header_name: Name of HTTP header
        :type  header_value: :class:`str` or ``None``
        :param header_value: Value of HTTP header
        :type  match_type: :class:`str` or ``None``
        :param match_type: Possible values are: 
            
            * :attr:`LBHttpRequestHeaderCondition.MATCH_TYPE_STARTS_WITH`
            * :attr:`LBHttpRequestHeaderCondition.MATCH_TYPE_ENDS_WITH`
            * :attr:`LBHttpRequestHeaderCondition.MATCH_TYPE_EQUALS`
            * :attr:`LBHttpRequestHeaderCondition.MATCH_TYPE_CONTAINS`
            * :attr:`LBHttpRequestHeaderCondition.MATCH_TYPE_REGEX`
            
             Match type of HTTP header value
        :type  inverse: :class:`bool` or ``None``
        :param inverse: A flag to indicate whether reverse the match result of this
            condition
        :type  type: :class:`str`
        :param type: Possible values are: 
            
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTURICONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTHEADERCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTMETHODCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTURIARGUMENTSCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTVERSIONCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTCOOKIECONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTBODYCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPRESPONSEHEADERCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBTCPHEADERCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBIPHEADERCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBVARIABLECONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPSSLCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBSSLSNICONDITION`
            
             Type of load balancer rule condition
        """
        self.case_sensitive = case_sensitive
        self.header_name = header_name
        self.header_value = header_value
        self.match_type = match_type
        self.inverse = inverse
        self._type = type
        VapiStruct.__init__(self)

    @property
    def type(self):
        """
        Return the discriminator value
        """
        return self._type

LBHttpRequestHeaderCondition._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_http_request_header_condition', {
        'case_sensitive': type.OptionalType(type.BooleanType()),
        'header_name': type.OptionalType(type.StringType()),
        'header_value': type.OptionalType(type.StringType()),
        'match_type': type.OptionalType(type.StringType()),
        'inverse': type.OptionalType(type.BooleanType()),
        'type': type.StringType(),
    },
    LBHttpRequestHeaderCondition,
    False,
    None))



class LBHttpRequestHeaderDeleteAction(VapiStruct):
    """
    This action is used to delete header fields of HTTP request messages at
    HTTP_REQUEST_REWRITE phase. One action can be used to delete all headers
    with same header name. To delete headers with different header names,
    multiple actions must be defined.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "LBHttpRequestHeaderDeleteAction"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'header_name': 'header_name',
                            'type': 'type',
                            }

    def __init__(self,
                 header_name=None,
                 type='LBHttpRequestHeaderDeleteAction',
                ):
        """
        :type  header_name: :class:`str` or ``None``
        :param header_name: Name of a header field of HTTP request message.
        :type  type: :class:`str`
        :param type: Possible values are: 
            
            * :attr:`LBRuleAction.TYPE_LBSELECTPOOLACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPREQUESTURIREWRITEACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPREQUESTHEADERREWRITEACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPREJECTACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPREDIRECTACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPRESPONSEHEADERREWRITEACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPREQUESTHEADERDELETEACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPRESPONSEHEADERDELETEACTION`
            * :attr:`LBRuleAction.TYPE_LBVARIABLEASSIGNMENTACTION`
            * :attr:`LBRuleAction.TYPE_LBVARIABLEPERSISTENCEONACTION`
            * :attr:`LBRuleAction.TYPE_LBVARIABLEPERSISTENCELEARNACTION`
            * :attr:`LBRuleAction.TYPE_LBJWTAUTHACTION`
            * :attr:`LBRuleAction.TYPE_LBSSLMODESELECTIONACTION`
            * :attr:`LBRuleAction.TYPE_LBCONNECTIONDROPACTION`
            
             The property identifies the load balancer rule action type.
        """
        self.header_name = header_name
        self._type = type
        VapiStruct.__init__(self)

    @property
    def type(self):
        """
        Return the discriminator value
        """
        return self._type

LBHttpRequestHeaderDeleteAction._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_http_request_header_delete_action', {
        'header_name': type.OptionalType(type.StringType()),
        'type': type.StringType(),
    },
    LBHttpRequestHeaderDeleteAction,
    False,
    None))



class LBHttpRequestHeaderRewriteAction(VapiStruct):
    """
    This action is used to rewrite header fields of matched HTTP request
    messages to specified new values. One action can be used to rewrite one
    header field. To rewrite multiple header fields, multiple actions must be
    defined. Captured variables and built-in variables can be used in the
    header_value field, header_name field does not support variables.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "LBHttpRequestHeaderRewriteAction"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'header_name': 'header_name',
                            'header_value': 'header_value',
                            'type': 'type',
                            }

    def __init__(self,
                 header_name=None,
                 header_value=None,
                 type='LBHttpRequestHeaderRewriteAction',
                ):
        """
        :type  header_name: :class:`str` or ``None``
        :param header_name: Name of HTTP request header.
        :type  header_value: :class:`str` or ``None``
        :param header_value: Value of HTTP request header.
        :type  type: :class:`str`
        :param type: Possible values are: 
            
            * :attr:`LBRuleAction.TYPE_LBSELECTPOOLACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPREQUESTURIREWRITEACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPREQUESTHEADERREWRITEACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPREJECTACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPREDIRECTACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPRESPONSEHEADERREWRITEACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPREQUESTHEADERDELETEACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPRESPONSEHEADERDELETEACTION`
            * :attr:`LBRuleAction.TYPE_LBVARIABLEASSIGNMENTACTION`
            * :attr:`LBRuleAction.TYPE_LBVARIABLEPERSISTENCEONACTION`
            * :attr:`LBRuleAction.TYPE_LBVARIABLEPERSISTENCELEARNACTION`
            * :attr:`LBRuleAction.TYPE_LBJWTAUTHACTION`
            * :attr:`LBRuleAction.TYPE_LBSSLMODESELECTIONACTION`
            * :attr:`LBRuleAction.TYPE_LBCONNECTIONDROPACTION`
            
             The property identifies the load balancer rule action type.
        """
        self.header_name = header_name
        self.header_value = header_value
        self._type = type
        VapiStruct.__init__(self)

    @property
    def type(self):
        """
        Return the discriminator value
        """
        return self._type

LBHttpRequestHeaderRewriteAction._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_http_request_header_rewrite_action', {
        'header_name': type.OptionalType(type.StringType()),
        'header_value': type.OptionalType(type.StringType()),
        'type': type.StringType(),
    },
    LBHttpRequestHeaderRewriteAction,
    False,
    None))



class LBHttpRequestMethodCondition(VapiStruct):
    """
    This condition is used to match method of HTTP requests. If the method of
    an HTTP request is same as the method specified in this condition, the HTTP
    request match this condition. For example, if the method field is set to
    GET in this condition, any HTTP request with GET method matches the
    condition.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "LBHttpRequestMethodCondition"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    METHOD_GET = "GET"
    """


    """
    METHOD_OPTIONS = "OPTIONS"
    """


    """
    METHOD_POST = "POST"
    """


    """
    METHOD_HEAD = "HEAD"
    """


    """
    METHOD_PUT = "PUT"
    """


    """



    _canonical_to_pep_names = {
                            'method': 'method',
                            'inverse': 'inverse',
                            'type': 'type',
                            }

    def __init__(self,
                 method=None,
                 inverse=None,
                 type='LBHttpRequestMethodCondition',
                ):
        """
        :type  method: :class:`str` or ``None``
        :param method: Possible values are: 
            
            * :attr:`LBHttpRequestMethodCondition.METHOD_GET`
            * :attr:`LBHttpRequestMethodCondition.METHOD_OPTIONS`
            * :attr:`LBHttpRequestMethodCondition.METHOD_POST`
            * :attr:`LBHttpRequestMethodCondition.METHOD_HEAD`
            * :attr:`LBHttpRequestMethodCondition.METHOD_PUT`
            
             Type of HTTP request method
        :type  inverse: :class:`bool` or ``None``
        :param inverse: A flag to indicate whether reverse the match result of this
            condition
        :type  type: :class:`str`
        :param type: Possible values are: 
            
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTURICONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTHEADERCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTMETHODCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTURIARGUMENTSCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTVERSIONCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTCOOKIECONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTBODYCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPRESPONSEHEADERCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBTCPHEADERCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBIPHEADERCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBVARIABLECONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPSSLCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBSSLSNICONDITION`
            
             Type of load balancer rule condition
        """
        self.method = method
        self.inverse = inverse
        self._type = type
        VapiStruct.__init__(self)

    @property
    def type(self):
        """
        Return the discriminator value
        """
        return self._type

LBHttpRequestMethodCondition._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_http_request_method_condition', {
        'method': type.OptionalType(type.StringType()),
        'inverse': type.OptionalType(type.BooleanType()),
        'type': type.StringType(),
    },
    LBHttpRequestMethodCondition,
    False,
    None))



class LBHttpRequestUriArgumentsCondition(VapiStruct):
    """
    This condition is used to match URI arguments aka query string of Http
    request messages, for example, in URI http://exaple.com?foo=1&bar=2, the
    \"foo=1&bar=2\" is the query string containing URI arguments. In an URI
    scheme, query string is indicated by the first question mark (\"?\")
    character and terminated by a number sign (\"#\") character or by the end
    of the URI. The uri_arguments field can be specified as a regular
    expression(Set match_type to REGEX). For example, \"foo=(?&lt;x&gt;\\d+)\".
    It matches HTTP requests whose URI arguments containing \"foo\", the value
    of foo contains only digits. And the value of foo is captured as $x which
    can be used in LBRuleAction fields which support variables.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "LBHttpRequestUriArgumentsCondition"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    MATCH_TYPE_STARTS_WITH = "STARTS_WITH"
    """


    """
    MATCH_TYPE_ENDS_WITH = "ENDS_WITH"
    """


    """
    MATCH_TYPE_EQUALS = "EQUALS"
    """


    """
    MATCH_TYPE_CONTAINS = "CONTAINS"
    """


    """
    MATCH_TYPE_REGEX = "REGEX"
    """


    """



    _canonical_to_pep_names = {
                            'case_sensitive': 'case_sensitive',
                            'match_type': 'match_type',
                            'uri_arguments': 'uri_arguments',
                            'inverse': 'inverse',
                            'type': 'type',
                            }

    def __init__(self,
                 case_sensitive=None,
                 match_type=None,
                 uri_arguments=None,
                 inverse=None,
                 type='LBHttpRequestUriArgumentsCondition',
                ):
        """
        :type  case_sensitive: :class:`bool` or ``None``
        :param case_sensitive: If true, case is significant when comparing URI arguments.
        :type  match_type: :class:`str` or ``None``
        :param match_type: Possible values are: 
            
            * :attr:`LBHttpRequestUriArgumentsCondition.MATCH_TYPE_STARTS_WITH`
            * :attr:`LBHttpRequestUriArgumentsCondition.MATCH_TYPE_ENDS_WITH`
            * :attr:`LBHttpRequestUriArgumentsCondition.MATCH_TYPE_EQUALS`
            * :attr:`LBHttpRequestUriArgumentsCondition.MATCH_TYPE_CONTAINS`
            * :attr:`LBHttpRequestUriArgumentsCondition.MATCH_TYPE_REGEX`
            
             Match type of URI arguments
        :type  uri_arguments: :class:`str` or ``None``
        :param uri_arguments: URI arguments, aka query string of URI.
        :type  inverse: :class:`bool` or ``None``
        :param inverse: A flag to indicate whether reverse the match result of this
            condition
        :type  type: :class:`str`
        :param type: Possible values are: 
            
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTURICONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTHEADERCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTMETHODCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTURIARGUMENTSCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTVERSIONCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTCOOKIECONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTBODYCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPRESPONSEHEADERCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBTCPHEADERCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBIPHEADERCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBVARIABLECONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPSSLCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBSSLSNICONDITION`
            
             Type of load balancer rule condition
        """
        self.case_sensitive = case_sensitive
        self.match_type = match_type
        self.uri_arguments = uri_arguments
        self.inverse = inverse
        self._type = type
        VapiStruct.__init__(self)

    @property
    def type(self):
        """
        Return the discriminator value
        """
        return self._type

LBHttpRequestUriArgumentsCondition._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_http_request_uri_arguments_condition', {
        'case_sensitive': type.OptionalType(type.BooleanType()),
        'match_type': type.OptionalType(type.StringType()),
        'uri_arguments': type.OptionalType(type.StringType()),
        'inverse': type.OptionalType(type.BooleanType()),
        'type': type.StringType(),
    },
    LBHttpRequestUriArgumentsCondition,
    False,
    None))



class LBHttpRequestUriCondition(VapiStruct):
    """
    This condition is used to match URIs(Uniform Resource Identifier) of HTTP
    request messages. The URI field can be specified as a regular expression.
    If an HTTP request message is requesting an URI which matches specified
    regular expression, it matches the condition. The syntax of whole URI looks
    like this:
    scheme:[//[user[:password]\\\\@]host[:port]][/path][?query][#fragment] This
    condition matches only the path part of entire URI. When match_type field
    is specified as REGEX, the uri field is used as a regular expression to
    match URI path of HTTP requests. For example, to match any URI that has
    \"/image/\" or \"/images/\", uri field can be specified as:
    \"/image[s]?/\". Named capturing groups can be used in the uri field to
    capture substrings of matched URIs and store them in variables for use in
    LBRuleAction. For example, specify uri field as:
    \"/news/(?&lt;year&gt;\\d+)/(?&lt;month&gt;\\d+)/(?&lt;article&gt;.\*)\" If
    the URI path is /articles/news/2017/06/xyz.html, then substring \"2017\" is
    captured in variable year, \"06\" is captured in variable month, and
    \"xyz.html\" is captured in variable article. These variables can then be
    used in an LBRuleAction field which supports variables, such as uri field
    of LBHttpRequestUriRewriteAction. For example, set the uri field of
    LBHttpRequestUriRewriteAction as: \"/articles/news/$year-$month-$article\"
    Then the URI path /articles/news/2017/06/xyz.html is rewritten to:
    \"/articles/news/2017-06-xyz.html\"

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "LBHttpRequestUriCondition"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    MATCH_TYPE_STARTS_WITH = "STARTS_WITH"
    """


    """
    MATCH_TYPE_ENDS_WITH = "ENDS_WITH"
    """


    """
    MATCH_TYPE_EQUALS = "EQUALS"
    """


    """
    MATCH_TYPE_CONTAINS = "CONTAINS"
    """


    """
    MATCH_TYPE_REGEX = "REGEX"
    """


    """



    _canonical_to_pep_names = {
                            'case_sensitive': 'case_sensitive',
                            'match_type': 'match_type',
                            'uri': 'uri',
                            'inverse': 'inverse',
                            'type': 'type',
                            }

    def __init__(self,
                 case_sensitive=None,
                 match_type=None,
                 uri=None,
                 inverse=None,
                 type='LBHttpRequestUriCondition',
                ):
        """
        :type  case_sensitive: :class:`bool` or ``None``
        :param case_sensitive: If true, case is significant when comparing URI.
        :type  match_type: :class:`str` or ``None``
        :param match_type: Possible values are: 
            
            * :attr:`LBHttpRequestUriCondition.MATCH_TYPE_STARTS_WITH`
            * :attr:`LBHttpRequestUriCondition.MATCH_TYPE_ENDS_WITH`
            * :attr:`LBHttpRequestUriCondition.MATCH_TYPE_EQUALS`
            * :attr:`LBHttpRequestUriCondition.MATCH_TYPE_CONTAINS`
            * :attr:`LBHttpRequestUriCondition.MATCH_TYPE_REGEX`
            
             Match type of URI
        :type  uri: :class:`str` or ``None``
        :param uri: A string used to identify resource
        :type  inverse: :class:`bool` or ``None``
        :param inverse: A flag to indicate whether reverse the match result of this
            condition
        :type  type: :class:`str`
        :param type: Possible values are: 
            
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTURICONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTHEADERCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTMETHODCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTURIARGUMENTSCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTVERSIONCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTCOOKIECONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTBODYCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPRESPONSEHEADERCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBTCPHEADERCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBIPHEADERCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBVARIABLECONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPSSLCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBSSLSNICONDITION`
            
             Type of load balancer rule condition
        """
        self.case_sensitive = case_sensitive
        self.match_type = match_type
        self.uri = uri
        self.inverse = inverse
        self._type = type
        VapiStruct.__init__(self)

    @property
    def type(self):
        """
        Return the discriminator value
        """
        return self._type

LBHttpRequestUriCondition._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_http_request_uri_condition', {
        'case_sensitive': type.OptionalType(type.BooleanType()),
        'match_type': type.OptionalType(type.StringType()),
        'uri': type.OptionalType(type.StringType()),
        'inverse': type.OptionalType(type.BooleanType()),
        'type': type.StringType(),
    },
    LBHttpRequestUriCondition,
    False,
    None))



class LBHttpRequestUriRewriteAction(VapiStruct):
    """
    This action is used to rewrite URIs in matched HTTP request messages.
    Specify the uri and uri_arguments fields in this condition to rewrite the
    matched HTTP request message's URI and URI arguments to the new values.
    Full URI scheme of HTTP messages have following syntax:
    scheme:[//[user[:password]\\\\@]host[:port]][/path][?query][#fragment] The
    uri field of this action is used to rewrite the /path part in above scheme.
    And the uri_arguments field is used to rewrite the query part. Captured
    variables and built-in variables can be used in the uri and uri_arguments
    fields. Check the example in LBRuleAction to see how to use variables in
    this action.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "LBHttpRequestUriRewriteAction"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'uri': 'uri',
                            'uri_arguments': 'uri_arguments',
                            'type': 'type',
                            }

    def __init__(self,
                 uri=None,
                 uri_arguments=None,
                 type='LBHttpRequestUriRewriteAction',
                ):
        """
        :type  uri: :class:`str` or ``None``
        :param uri: URI of HTTP request.
        :type  uri_arguments: :class:`str` or ``None``
        :param uri_arguments: Query string of URI, typically contains key value pairs, for
            example: foo1=bar1&foo2=bar2.
        :type  type: :class:`str`
        :param type: Possible values are: 
            
            * :attr:`LBRuleAction.TYPE_LBSELECTPOOLACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPREQUESTURIREWRITEACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPREQUESTHEADERREWRITEACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPREJECTACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPREDIRECTACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPRESPONSEHEADERREWRITEACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPREQUESTHEADERDELETEACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPRESPONSEHEADERDELETEACTION`
            * :attr:`LBRuleAction.TYPE_LBVARIABLEASSIGNMENTACTION`
            * :attr:`LBRuleAction.TYPE_LBVARIABLEPERSISTENCEONACTION`
            * :attr:`LBRuleAction.TYPE_LBVARIABLEPERSISTENCELEARNACTION`
            * :attr:`LBRuleAction.TYPE_LBJWTAUTHACTION`
            * :attr:`LBRuleAction.TYPE_LBSSLMODESELECTIONACTION`
            * :attr:`LBRuleAction.TYPE_LBCONNECTIONDROPACTION`
            
             The property identifies the load balancer rule action type.
        """
        self.uri = uri
        self.uri_arguments = uri_arguments
        self._type = type
        VapiStruct.__init__(self)

    @property
    def type(self):
        """
        Return the discriminator value
        """
        return self._type

LBHttpRequestUriRewriteAction._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_http_request_uri_rewrite_action', {
        'uri': type.OptionalType(type.StringType()),
        'uri_arguments': type.OptionalType(type.StringType()),
        'type': type.StringType(),
    },
    LBHttpRequestUriRewriteAction,
    False,
    None))



class LBHttpRequestVersionCondition(VapiStruct):
    """
    This condition is used to match the HTTP protocol version of the HTTP
    request messages.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "LBHttpRequestVersionCondition"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    VERSION_1_0 = "HTTP_VERSION_1_0"
    """


    """
    VERSION_1_1 = "HTTP_VERSION_1_1"
    """


    """
    VERSION_2_0 = "HTTP_VERSION_2_0"
    """


    """



    _canonical_to_pep_names = {
                            'version': 'version',
                            'inverse': 'inverse',
                            'type': 'type',
                            }

    def __init__(self,
                 version=None,
                 inverse=None,
                 type='LBHttpRequestVersionCondition',
                ):
        """
        :type  version: :class:`str` or ``None``
        :param version: Possible values are: 
            
            * :attr:`LBHttpRequestVersionCondition.VERSION__1_0`
            * :attr:`LBHttpRequestVersionCondition.VERSION__1_1`
            * :attr:`LBHttpRequestVersionCondition.VERSION__2_0`
            
             HTTP version
        :type  inverse: :class:`bool` or ``None``
        :param inverse: A flag to indicate whether reverse the match result of this
            condition
        :type  type: :class:`str`
        :param type: Possible values are: 
            
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTURICONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTHEADERCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTMETHODCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTURIARGUMENTSCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTVERSIONCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTCOOKIECONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTBODYCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPRESPONSEHEADERCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBTCPHEADERCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBIPHEADERCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBVARIABLECONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPSSLCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBSSLSNICONDITION`
            
             Type of load balancer rule condition
        """
        self.version = version
        self.inverse = inverse
        self._type = type
        VapiStruct.__init__(self)

    @property
    def type(self):
        """
        Return the discriminator value
        """
        return self._type

LBHttpRequestVersionCondition._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_http_request_version_condition', {
        'version': type.OptionalType(type.StringType()),
        'inverse': type.OptionalType(type.BooleanType()),
        'type': type.StringType(),
    },
    LBHttpRequestVersionCondition,
    False,
    None))



class LBHttpResponseHeaderCondition(VapiStruct):
    """
    This condition is used to match HTTP response messages from backend servers
    by HTTP header fields. HTTP header fields are components of the header
    section of HTTP request and response messages. They define the operating
    parameters of an HTTP transaction. For example, Cookie, Authorization,
    User-Agent, etc. One condition can be used to match one header field, to
    match multiple header fields, multiple conditions must be specified. The
    match_type field defines how header_value field is used to match HTTP
    responses. The header_name field does not support match types.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "LBHttpResponseHeaderCondition"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    MATCH_TYPE_STARTS_WITH = "STARTS_WITH"
    """


    """
    MATCH_TYPE_ENDS_WITH = "ENDS_WITH"
    """


    """
    MATCH_TYPE_EQUALS = "EQUALS"
    """


    """
    MATCH_TYPE_CONTAINS = "CONTAINS"
    """


    """
    MATCH_TYPE_REGEX = "REGEX"
    """


    """



    _canonical_to_pep_names = {
                            'case_sensitive': 'case_sensitive',
                            'header_name': 'header_name',
                            'header_value': 'header_value',
                            'match_type': 'match_type',
                            'inverse': 'inverse',
                            'type': 'type',
                            }

    def __init__(self,
                 case_sensitive=None,
                 header_name=None,
                 header_value=None,
                 match_type=None,
                 inverse=None,
                 type='LBHttpResponseHeaderCondition',
                ):
        """
        :type  case_sensitive: :class:`bool` or ``None``
        :param case_sensitive: If true, case is significant when comparing HTTP header value.
        :type  header_name: :class:`str` or ``None``
        :param header_name: Name of HTTP header field
        :type  header_value: :class:`str` or ``None``
        :param header_value: Value of HTTP header field
        :type  match_type: :class:`str` or ``None``
        :param match_type: Possible values are: 
            
            * :attr:`LBHttpResponseHeaderCondition.MATCH_TYPE_STARTS_WITH`
            * :attr:`LBHttpResponseHeaderCondition.MATCH_TYPE_ENDS_WITH`
            * :attr:`LBHttpResponseHeaderCondition.MATCH_TYPE_EQUALS`
            * :attr:`LBHttpResponseHeaderCondition.MATCH_TYPE_CONTAINS`
            * :attr:`LBHttpResponseHeaderCondition.MATCH_TYPE_REGEX`
            
             Match type of HTTP header value
        :type  inverse: :class:`bool` or ``None``
        :param inverse: A flag to indicate whether reverse the match result of this
            condition
        :type  type: :class:`str`
        :param type: Possible values are: 
            
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTURICONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTHEADERCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTMETHODCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTURIARGUMENTSCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTVERSIONCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTCOOKIECONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTBODYCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPRESPONSEHEADERCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBTCPHEADERCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBIPHEADERCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBVARIABLECONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPSSLCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBSSLSNICONDITION`
            
             Type of load balancer rule condition
        """
        self.case_sensitive = case_sensitive
        self.header_name = header_name
        self.header_value = header_value
        self.match_type = match_type
        self.inverse = inverse
        self._type = type
        VapiStruct.__init__(self)

    @property
    def type(self):
        """
        Return the discriminator value
        """
        return self._type

LBHttpResponseHeaderCondition._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_http_response_header_condition', {
        'case_sensitive': type.OptionalType(type.BooleanType()),
        'header_name': type.OptionalType(type.StringType()),
        'header_value': type.OptionalType(type.StringType()),
        'match_type': type.OptionalType(type.StringType()),
        'inverse': type.OptionalType(type.BooleanType()),
        'type': type.StringType(),
    },
    LBHttpResponseHeaderCondition,
    False,
    None))



class LBHttpResponseHeaderDeleteAction(VapiStruct):
    """
    This action is used to delete header fields of HTTP response messages at
    HTTP_RESPONSE_REWRITE phase. One action can be used to delete allgi headers
    with same header name. To delete headers with different header names,
    multiple actions must be defined.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "LBHttpResponseHeaderDeleteAction"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'header_name': 'header_name',
                            'type': 'type',
                            }

    def __init__(self,
                 header_name=None,
                 type='LBHttpResponseHeaderDeleteAction',
                ):
        """
        :type  header_name: :class:`str` or ``None``
        :param header_name: Name of a header field of HTTP response message.
        :type  type: :class:`str`
        :param type: Possible values are: 
            
            * :attr:`LBRuleAction.TYPE_LBSELECTPOOLACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPREQUESTURIREWRITEACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPREQUESTHEADERREWRITEACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPREJECTACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPREDIRECTACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPRESPONSEHEADERREWRITEACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPREQUESTHEADERDELETEACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPRESPONSEHEADERDELETEACTION`
            * :attr:`LBRuleAction.TYPE_LBVARIABLEASSIGNMENTACTION`
            * :attr:`LBRuleAction.TYPE_LBVARIABLEPERSISTENCEONACTION`
            * :attr:`LBRuleAction.TYPE_LBVARIABLEPERSISTENCELEARNACTION`
            * :attr:`LBRuleAction.TYPE_LBJWTAUTHACTION`
            * :attr:`LBRuleAction.TYPE_LBSSLMODESELECTIONACTION`
            * :attr:`LBRuleAction.TYPE_LBCONNECTIONDROPACTION`
            
             The property identifies the load balancer rule action type.
        """
        self.header_name = header_name
        self._type = type
        VapiStruct.__init__(self)

    @property
    def type(self):
        """
        Return the discriminator value
        """
        return self._type

LBHttpResponseHeaderDeleteAction._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_http_response_header_delete_action', {
        'header_name': type.OptionalType(type.StringType()),
        'type': type.StringType(),
    },
    LBHttpResponseHeaderDeleteAction,
    False,
    None))



class LBHttpResponseHeaderRewriteAction(VapiStruct):
    """
    This action is used to rewrite header fields of HTTP response messages to
    specified new values at HTTP_RESPONSE_REWRITE phase. One action can be used
    to rewrite one header field. To rewrite multiple header fields, multiple
    actions must be defined. Captured variables and built-in variables can be
    used in the header_value field, header_name field does not support
    variables.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "LBHttpResponseHeaderRewriteAction"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'header_name': 'header_name',
                            'header_value': 'header_value',
                            'type': 'type',
                            }

    def __init__(self,
                 header_name=None,
                 header_value=None,
                 type='LBHttpResponseHeaderRewriteAction',
                ):
        """
        :type  header_name: :class:`str` or ``None``
        :param header_name: Name of a header field of HTTP request message.
        :type  header_value: :class:`str` or ``None``
        :param header_value: Value of header field
        :type  type: :class:`str`
        :param type: Possible values are: 
            
            * :attr:`LBRuleAction.TYPE_LBSELECTPOOLACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPREQUESTURIREWRITEACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPREQUESTHEADERREWRITEACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPREJECTACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPREDIRECTACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPRESPONSEHEADERREWRITEACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPREQUESTHEADERDELETEACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPRESPONSEHEADERDELETEACTION`
            * :attr:`LBRuleAction.TYPE_LBVARIABLEASSIGNMENTACTION`
            * :attr:`LBRuleAction.TYPE_LBVARIABLEPERSISTENCEONACTION`
            * :attr:`LBRuleAction.TYPE_LBVARIABLEPERSISTENCELEARNACTION`
            * :attr:`LBRuleAction.TYPE_LBJWTAUTHACTION`
            * :attr:`LBRuleAction.TYPE_LBSSLMODESELECTIONACTION`
            * :attr:`LBRuleAction.TYPE_LBCONNECTIONDROPACTION`
            
             The property identifies the load balancer rule action type.
        """
        self.header_name = header_name
        self.header_value = header_value
        self._type = type
        VapiStruct.__init__(self)

    @property
    def type(self):
        """
        Return the discriminator value
        """
        return self._type

LBHttpResponseHeaderRewriteAction._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_http_response_header_rewrite_action', {
        'header_name': type.OptionalType(type.StringType()),
        'header_value': type.OptionalType(type.StringType()),
        'type': type.StringType(),
    },
    LBHttpResponseHeaderRewriteAction,
    False,
    None))



class LBHttpSslCondition(VapiStruct):
    """
    This condition is used to match SSL handshake and SSL connection at all
    phases.If multiple properties are configured, the rule is considered a
    match when all the configured properties are matched.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "LBHttpSslCondition"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    CLIENT_SUPPORTED_SSL_CIPHERS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 = "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"
    """


    """
    CLIENT_SUPPORTED_SSL_CIPHERS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 = "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384"
    """


    """
    CLIENT_SUPPORTED_SSL_CIPHERS_ECDHE_RSA_WITH_AES_256_CBC_SHA = "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA"
    """


    """
    CLIENT_SUPPORTED_SSL_CIPHERS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA = "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA"
    """


    """
    CLIENT_SUPPORTED_SSL_CIPHERS_ECDH_ECDSA_WITH_AES_256_CBC_SHA = "TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA"
    """


    """
    CLIENT_SUPPORTED_SSL_CIPHERS_ECDH_RSA_WITH_AES_256_CBC_SHA = "TLS_ECDH_RSA_WITH_AES_256_CBC_SHA"
    """


    """
    CLIENT_SUPPORTED_SSL_CIPHERS_RSA_WITH_AES_256_CBC_SHA = "TLS_RSA_WITH_AES_256_CBC_SHA"
    """


    """
    CLIENT_SUPPORTED_SSL_CIPHERS_RSA_WITH_AES_128_CBC_SHA = "TLS_RSA_WITH_AES_128_CBC_SHA"
    """


    """
    CLIENT_SUPPORTED_SSL_CIPHERS_RSA_WITH_3DES_EDE_CBC_SHA = "TLS_RSA_WITH_3DES_EDE_CBC_SHA"
    """


    """
    CLIENT_SUPPORTED_SSL_CIPHERS_ECDHE_RSA_WITH_AES_128_CBC_SHA = "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA"
    """


    """
    CLIENT_SUPPORTED_SSL_CIPHERS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 = "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256"
    """


    """
    CLIENT_SUPPORTED_SSL_CIPHERS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 = "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384"
    """


    """
    CLIENT_SUPPORTED_SSL_CIPHERS_RSA_WITH_AES_128_CBC_SHA256 = "TLS_RSA_WITH_AES_128_CBC_SHA256"
    """


    """
    CLIENT_SUPPORTED_SSL_CIPHERS_RSA_WITH_AES_128_GCM_SHA256 = "TLS_RSA_WITH_AES_128_GCM_SHA256"
    """


    """
    CLIENT_SUPPORTED_SSL_CIPHERS_RSA_WITH_AES_256_CBC_SHA256 = "TLS_RSA_WITH_AES_256_CBC_SHA256"
    """


    """
    CLIENT_SUPPORTED_SSL_CIPHERS_RSA_WITH_AES_256_GCM_SHA384 = "TLS_RSA_WITH_AES_256_GCM_SHA384"
    """


    """
    CLIENT_SUPPORTED_SSL_CIPHERS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA = "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA"
    """


    """
    CLIENT_SUPPORTED_SSL_CIPHERS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 = "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256"
    """


    """
    CLIENT_SUPPORTED_SSL_CIPHERS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 = "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256"
    """


    """
    CLIENT_SUPPORTED_SSL_CIPHERS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 = "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384"
    """


    """
    CLIENT_SUPPORTED_SSL_CIPHERS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 = "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384"
    """


    """
    CLIENT_SUPPORTED_SSL_CIPHERS_ECDH_ECDSA_WITH_AES_128_CBC_SHA = "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA"
    """


    """
    CLIENT_SUPPORTED_SSL_CIPHERS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256 = "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256"
    """


    """
    CLIENT_SUPPORTED_SSL_CIPHERS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 = "TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256"
    """


    """
    CLIENT_SUPPORTED_SSL_CIPHERS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384 = "TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384"
    """


    """
    CLIENT_SUPPORTED_SSL_CIPHERS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 = "TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384"
    """


    """
    CLIENT_SUPPORTED_SSL_CIPHERS_ECDH_RSA_WITH_AES_128_CBC_SHA = "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA"
    """


    """
    CLIENT_SUPPORTED_SSL_CIPHERS_ECDH_RSA_WITH_AES_128_CBC_SHA256 = "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256"
    """


    """
    CLIENT_SUPPORTED_SSL_CIPHERS_ECDH_RSA_WITH_AES_128_GCM_SHA256 = "TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256"
    """


    """
    CLIENT_SUPPORTED_SSL_CIPHERS_ECDH_RSA_WITH_AES_256_CBC_SHA384 = "TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384"
    """


    """
    CLIENT_SUPPORTED_SSL_CIPHERS_ECDH_RSA_WITH_AES_256_GCM_SHA384 = "TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384"
    """


    """
    SESSION_REUSED_IGNORE = "IGNORE"
    """


    """
    SESSION_REUSED_REUSED = "REUSED"
    """


    """
    SESSION_REUSED_NEW = "NEW"
    """


    """
    USED_PROTOCOL_SSL_V2 = "SSL_V2"
    """


    """
    USED_PROTOCOL_SSL_V3 = "SSL_V3"
    """


    """
    USED_PROTOCOL_TLS_V1 = "TLS_V1"
    """


    """
    USED_PROTOCOL_TLS_V1_1 = "TLS_V1_1"
    """


    """
    USED_PROTOCOL_TLS_V1_2 = "TLS_V1_2"
    """


    """
    USED_SSL_CIPHER_ECDHE_RSA_WITH_AES_128_GCM_SHA256 = "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"
    """


    """
    USED_SSL_CIPHER_ECDHE_RSA_WITH_AES_256_GCM_SHA384 = "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384"
    """


    """
    USED_SSL_CIPHER_ECDHE_RSA_WITH_AES_256_CBC_SHA = "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA"
    """


    """
    USED_SSL_CIPHER_ECDHE_ECDSA_WITH_AES_256_CBC_SHA = "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA"
    """


    """
    USED_SSL_CIPHER_ECDH_ECDSA_WITH_AES_256_CBC_SHA = "TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA"
    """


    """
    USED_SSL_CIPHER_ECDH_RSA_WITH_AES_256_CBC_SHA = "TLS_ECDH_RSA_WITH_AES_256_CBC_SHA"
    """


    """
    USED_SSL_CIPHER_RSA_WITH_AES_256_CBC_SHA = "TLS_RSA_WITH_AES_256_CBC_SHA"
    """


    """
    USED_SSL_CIPHER_RSA_WITH_AES_128_CBC_SHA = "TLS_RSA_WITH_AES_128_CBC_SHA"
    """


    """
    USED_SSL_CIPHER_RSA_WITH_3DES_EDE_CBC_SHA = "TLS_RSA_WITH_3DES_EDE_CBC_SHA"
    """


    """
    USED_SSL_CIPHER_ECDHE_RSA_WITH_AES_128_CBC_SHA = "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA"
    """


    """
    USED_SSL_CIPHER_ECDHE_RSA_WITH_AES_128_CBC_SHA256 = "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256"
    """


    """
    USED_SSL_CIPHER_ECDHE_RSA_WITH_AES_256_CBC_SHA384 = "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384"
    """


    """
    USED_SSL_CIPHER_RSA_WITH_AES_128_CBC_SHA256 = "TLS_RSA_WITH_AES_128_CBC_SHA256"
    """


    """
    USED_SSL_CIPHER_RSA_WITH_AES_128_GCM_SHA256 = "TLS_RSA_WITH_AES_128_GCM_SHA256"
    """


    """
    USED_SSL_CIPHER_RSA_WITH_AES_256_CBC_SHA256 = "TLS_RSA_WITH_AES_256_CBC_SHA256"
    """


    """
    USED_SSL_CIPHER_RSA_WITH_AES_256_GCM_SHA384 = "TLS_RSA_WITH_AES_256_GCM_SHA384"
    """


    """
    USED_SSL_CIPHER_ECDHE_ECDSA_WITH_AES_128_CBC_SHA = "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA"
    """


    """
    USED_SSL_CIPHER_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 = "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256"
    """


    """
    USED_SSL_CIPHER_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 = "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256"
    """


    """
    USED_SSL_CIPHER_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 = "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384"
    """


    """
    USED_SSL_CIPHER_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 = "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384"
    """


    """
    USED_SSL_CIPHER_ECDH_ECDSA_WITH_AES_128_CBC_SHA = "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA"
    """


    """
    USED_SSL_CIPHER_ECDH_ECDSA_WITH_AES_128_CBC_SHA256 = "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256"
    """


    """
    USED_SSL_CIPHER_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 = "TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256"
    """


    """
    USED_SSL_CIPHER_ECDH_ECDSA_WITH_AES_256_CBC_SHA384 = "TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384"
    """


    """
    USED_SSL_CIPHER_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 = "TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384"
    """


    """
    USED_SSL_CIPHER_ECDH_RSA_WITH_AES_128_CBC_SHA = "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA"
    """


    """
    USED_SSL_CIPHER_ECDH_RSA_WITH_AES_128_CBC_SHA256 = "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256"
    """


    """
    USED_SSL_CIPHER_ECDH_RSA_WITH_AES_128_GCM_SHA256 = "TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256"
    """


    """
    USED_SSL_CIPHER_ECDH_RSA_WITH_AES_256_CBC_SHA384 = "TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384"
    """


    """
    USED_SSL_CIPHER_ECDH_RSA_WITH_AES_256_GCM_SHA384 = "TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384"
    """


    """



    _canonical_to_pep_names = {
                            'client_certificate_issuer_dn': 'client_certificate_issuer_dn',
                            'client_certificate_subject_dn': 'client_certificate_subject_dn',
                            'client_supported_ssl_ciphers': 'client_supported_ssl_ciphers',
                            'session_reused': 'session_reused',
                            'used_protocol': 'used_protocol',
                            'used_ssl_cipher': 'used_ssl_cipher',
                            'inverse': 'inverse',
                            'type': 'type',
                            }

    def __init__(self,
                 client_certificate_issuer_dn=None,
                 client_certificate_subject_dn=None,
                 client_supported_ssl_ciphers=None,
                 session_reused=None,
                 used_protocol=None,
                 used_ssl_cipher=None,
                 inverse=None,
                 type='LBHttpSslCondition',
                ):
        """
        :type  client_certificate_issuer_dn: :class:`LBClientCertificateIssuerDnCondition` or ``None``
        :param client_certificate_issuer_dn: The issuer DN match condition of the client certificate for an
            established SSL connection.
        :type  client_certificate_subject_dn: :class:`LBClientCertificateSubjectDnCondition` or ``None``
        :param client_certificate_subject_dn: The subject DN match condition of the client certificate for an
            established SSL connection.
        :type  client_supported_ssl_ciphers: :class:`list` of :class:`str` or ``None``
        :param client_supported_ssl_ciphers: Possible values are: 
            
            *
              :attr:`LBHttpSslCondition.CLIENT_SUPPORTED_SSL_CIPHERS_ECDHE_RSA_WITH_AES_128_GCM_SHA256`
            *
              :attr:`LBHttpSslCondition.CLIENT_SUPPORTED_SSL_CIPHERS_ECDHE_RSA_WITH_AES_256_GCM_SHA384`
            *
              :attr:`LBHttpSslCondition.CLIENT_SUPPORTED_SSL_CIPHERS_ECDHE_RSA_WITH_AES_256_CBC_SHA`
            *
              :attr:`LBHttpSslCondition.CLIENT_SUPPORTED_SSL_CIPHERS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA`
            *
              :attr:`LBHttpSslCondition.CLIENT_SUPPORTED_SSL_CIPHERS_ECDH_ECDSA_WITH_AES_256_CBC_SHA`
            *
              :attr:`LBHttpSslCondition.CLIENT_SUPPORTED_SSL_CIPHERS_ECDH_RSA_WITH_AES_256_CBC_SHA`
            *
              :attr:`LBHttpSslCondition.CLIENT_SUPPORTED_SSL_CIPHERS_RSA_WITH_AES_256_CBC_SHA`
            *
              :attr:`LBHttpSslCondition.CLIENT_SUPPORTED_SSL_CIPHERS_RSA_WITH_AES_128_CBC_SHA`
            *
              :attr:`LBHttpSslCondition.CLIENT_SUPPORTED_SSL_CIPHERS_RSA_WITH_3DES_EDE_CBC_SHA`
            *
              :attr:`LBHttpSslCondition.CLIENT_SUPPORTED_SSL_CIPHERS_ECDHE_RSA_WITH_AES_128_CBC_SHA`
            *
              :attr:`LBHttpSslCondition.CLIENT_SUPPORTED_SSL_CIPHERS_ECDHE_RSA_WITH_AES_128_CBC_SHA256`
            *
              :attr:`LBHttpSslCondition.CLIENT_SUPPORTED_SSL_CIPHERS_ECDHE_RSA_WITH_AES_256_CBC_SHA384`
            *
              :attr:`LBHttpSslCondition.CLIENT_SUPPORTED_SSL_CIPHERS_RSA_WITH_AES_128_CBC_SHA256`
            *
              :attr:`LBHttpSslCondition.CLIENT_SUPPORTED_SSL_CIPHERS_RSA_WITH_AES_128_GCM_SHA256`
            *
              :attr:`LBHttpSslCondition.CLIENT_SUPPORTED_SSL_CIPHERS_RSA_WITH_AES_256_CBC_SHA256`
            *
              :attr:`LBHttpSslCondition.CLIENT_SUPPORTED_SSL_CIPHERS_RSA_WITH_AES_256_GCM_SHA384`
            *
              :attr:`LBHttpSslCondition.CLIENT_SUPPORTED_SSL_CIPHERS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA`
            *
              :attr:`LBHttpSslCondition.CLIENT_SUPPORTED_SSL_CIPHERS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256`
            *
              :attr:`LBHttpSslCondition.CLIENT_SUPPORTED_SSL_CIPHERS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256`
            *
              :attr:`LBHttpSslCondition.CLIENT_SUPPORTED_SSL_CIPHERS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384`
            *
              :attr:`LBHttpSslCondition.CLIENT_SUPPORTED_SSL_CIPHERS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384`
            *
              :attr:`LBHttpSslCondition.CLIENT_SUPPORTED_SSL_CIPHERS_ECDH_ECDSA_WITH_AES_128_CBC_SHA`
            *
              :attr:`LBHttpSslCondition.CLIENT_SUPPORTED_SSL_CIPHERS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256`
            *
              :attr:`LBHttpSslCondition.CLIENT_SUPPORTED_SSL_CIPHERS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256`
            *
              :attr:`LBHttpSslCondition.CLIENT_SUPPORTED_SSL_CIPHERS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384`
            *
              :attr:`LBHttpSslCondition.CLIENT_SUPPORTED_SSL_CIPHERS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384`
            *
              :attr:`LBHttpSslCondition.CLIENT_SUPPORTED_SSL_CIPHERS_ECDH_RSA_WITH_AES_128_CBC_SHA`
            *
              :attr:`LBHttpSslCondition.CLIENT_SUPPORTED_SSL_CIPHERS_ECDH_RSA_WITH_AES_128_CBC_SHA256`
            *
              :attr:`LBHttpSslCondition.CLIENT_SUPPORTED_SSL_CIPHERS_ECDH_RSA_WITH_AES_128_GCM_SHA256`
            *
              :attr:`LBHttpSslCondition.CLIENT_SUPPORTED_SSL_CIPHERS_ECDH_RSA_WITH_AES_256_CBC_SHA384`
            *
              :attr:`LBHttpSslCondition.CLIENT_SUPPORTED_SSL_CIPHERS_ECDH_RSA_WITH_AES_256_GCM_SHA384`
            
             Cipher list which supported by client.
        :type  session_reused: :class:`str` or ``None``
        :param session_reused: Possible values are: 
            
            * :attr:`LBHttpSslCondition.SESSION_REUSED_IGNORE`
            * :attr:`LBHttpSslCondition.SESSION_REUSED_REUSED`
            * :attr:`LBHttpSslCondition.SESSION_REUSED_NEW`
            
             The type of SSL session reused.
        :type  used_protocol: :class:`str` or ``None``
        :param used_protocol: Possible values are: 
            
            * :attr:`LBHttpSslCondition.USED_PROTOCOL_SSL_V2`
            * :attr:`LBHttpSslCondition.USED_PROTOCOL_SSL_V3`
            * :attr:`LBHttpSslCondition.USED_PROTOCOL_TLS_V1`
            * :attr:`LBHttpSslCondition.USED_PROTOCOL_TLS_V1_1`
            * :attr:`LBHttpSslCondition.USED_PROTOCOL_TLS_V1_2`
            
             Protocol of an established SSL connection.
        :type  used_ssl_cipher: :class:`str` or ``None``
        :param used_ssl_cipher: Possible values are: 
            
            *
              :attr:`LBHttpSslCondition.USED_SSL_CIPHER_ECDHE_RSA_WITH_AES_128_GCM_SHA256`
            *
              :attr:`LBHttpSslCondition.USED_SSL_CIPHER_ECDHE_RSA_WITH_AES_256_GCM_SHA384`
            *
              :attr:`LBHttpSslCondition.USED_SSL_CIPHER_ECDHE_RSA_WITH_AES_256_CBC_SHA`
            *
              :attr:`LBHttpSslCondition.USED_SSL_CIPHER_ECDHE_ECDSA_WITH_AES_256_CBC_SHA`
            *
              :attr:`LBHttpSslCondition.USED_SSL_CIPHER_ECDH_ECDSA_WITH_AES_256_CBC_SHA`
            *
              :attr:`LBHttpSslCondition.USED_SSL_CIPHER_ECDH_RSA_WITH_AES_256_CBC_SHA`
            *
              :attr:`LBHttpSslCondition.USED_SSL_CIPHER_RSA_WITH_AES_256_CBC_SHA`
            *
              :attr:`LBHttpSslCondition.USED_SSL_CIPHER_RSA_WITH_AES_128_CBC_SHA`
            *
              :attr:`LBHttpSslCondition.USED_SSL_CIPHER_RSA_WITH_3DES_EDE_CBC_SHA`
            *
              :attr:`LBHttpSslCondition.USED_SSL_CIPHER_ECDHE_RSA_WITH_AES_128_CBC_SHA`
            *
              :attr:`LBHttpSslCondition.USED_SSL_CIPHER_ECDHE_RSA_WITH_AES_128_CBC_SHA256`
            *
              :attr:`LBHttpSslCondition.USED_SSL_CIPHER_ECDHE_RSA_WITH_AES_256_CBC_SHA384`
            *
              :attr:`LBHttpSslCondition.USED_SSL_CIPHER_RSA_WITH_AES_128_CBC_SHA256`
            *
              :attr:`LBHttpSslCondition.USED_SSL_CIPHER_RSA_WITH_AES_128_GCM_SHA256`
            *
              :attr:`LBHttpSslCondition.USED_SSL_CIPHER_RSA_WITH_AES_256_CBC_SHA256`
            *
              :attr:`LBHttpSslCondition.USED_SSL_CIPHER_RSA_WITH_AES_256_GCM_SHA384`
            *
              :attr:`LBHttpSslCondition.USED_SSL_CIPHER_ECDHE_ECDSA_WITH_AES_128_CBC_SHA`
            *
              :attr:`LBHttpSslCondition.USED_SSL_CIPHER_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256`
            *
              :attr:`LBHttpSslCondition.USED_SSL_CIPHER_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256`
            *
              :attr:`LBHttpSslCondition.USED_SSL_CIPHER_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384`
            *
              :attr:`LBHttpSslCondition.USED_SSL_CIPHER_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384`
            *
              :attr:`LBHttpSslCondition.USED_SSL_CIPHER_ECDH_ECDSA_WITH_AES_128_CBC_SHA`
            *
              :attr:`LBHttpSslCondition.USED_SSL_CIPHER_ECDH_ECDSA_WITH_AES_128_CBC_SHA256`
            *
              :attr:`LBHttpSslCondition.USED_SSL_CIPHER_ECDH_ECDSA_WITH_AES_128_GCM_SHA256`
            *
              :attr:`LBHttpSslCondition.USED_SSL_CIPHER_ECDH_ECDSA_WITH_AES_256_CBC_SHA384`
            *
              :attr:`LBHttpSslCondition.USED_SSL_CIPHER_ECDH_ECDSA_WITH_AES_256_GCM_SHA384`
            *
              :attr:`LBHttpSslCondition.USED_SSL_CIPHER_ECDH_RSA_WITH_AES_128_CBC_SHA`
            *
              :attr:`LBHttpSslCondition.USED_SSL_CIPHER_ECDH_RSA_WITH_AES_128_CBC_SHA256`
            *
              :attr:`LBHttpSslCondition.USED_SSL_CIPHER_ECDH_RSA_WITH_AES_128_GCM_SHA256`
            *
              :attr:`LBHttpSslCondition.USED_SSL_CIPHER_ECDH_RSA_WITH_AES_256_CBC_SHA384`
            *
              :attr:`LBHttpSslCondition.USED_SSL_CIPHER_ECDH_RSA_WITH_AES_256_GCM_SHA384`
            
             Cipher used for an established SSL connection.
        :type  inverse: :class:`bool` or ``None``
        :param inverse: A flag to indicate whether reverse the match result of this
            condition
        :type  type: :class:`str`
        :param type: Possible values are: 
            
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTURICONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTHEADERCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTMETHODCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTURIARGUMENTSCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTVERSIONCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTCOOKIECONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTBODYCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPRESPONSEHEADERCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBTCPHEADERCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBIPHEADERCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBVARIABLECONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPSSLCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBSSLSNICONDITION`
            
             Type of load balancer rule condition
        """
        self.client_certificate_issuer_dn = client_certificate_issuer_dn
        self.client_certificate_subject_dn = client_certificate_subject_dn
        self.client_supported_ssl_ciphers = client_supported_ssl_ciphers
        self.session_reused = session_reused
        self.used_protocol = used_protocol
        self.used_ssl_cipher = used_ssl_cipher
        self.inverse = inverse
        self._type = type
        VapiStruct.__init__(self)

    @property
    def type(self):
        """
        Return the discriminator value
        """
        return self._type

LBHttpSslCondition._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_http_ssl_condition', {
        'client_certificate_issuer_dn': type.OptionalType(type.ReferenceType(__name__, 'LBClientCertificateIssuerDnCondition')),
        'client_certificate_subject_dn': type.OptionalType(type.ReferenceType(__name__, 'LBClientCertificateSubjectDnCondition')),
        'client_supported_ssl_ciphers': type.OptionalType(type.ListType(type.StringType())),
        'session_reused': type.OptionalType(type.StringType()),
        'used_protocol': type.OptionalType(type.StringType()),
        'used_ssl_cipher': type.OptionalType(type.StringType()),
        'inverse': type.OptionalType(type.BooleanType()),
        'type': type.StringType(),
    },
    LBHttpSslCondition,
    False,
    None))



class LBHttpsMonitorProfile(VapiStruct):
    """
    Active healthchecks are disabled by default and can be enabled for a server
    pool by binding a health monitor to the Group through the LBRule object.
    This represents active health monitoring over HTTPS. Active healthchecks
    are initiated periodically, at a configurable interval, to each member of
    the Group. Only if a healthcheck fails consecutively for a specified number
    of times (fall_count) to a member will the member status be marked DOWN.
    Once a member is DOWN, a specified number of consecutive successful
    healthchecks (rise_count) will bring the member back to UP state. After a
    healthcheck is initiated, if it does not complete within a certain period,
    then also the healthcheck is considered to be unsuccessful. Completing a
    healthcheck within timeout means establishing a connection (TCP or SSL), if
    applicable, sending the request and receiving the response, all within the
    configured timeout.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    REQUEST_METHOD_GET = "GET"
    """


    """
    REQUEST_METHOD_OPTIONS = "OPTIONS"
    """


    """
    REQUEST_METHOD_POST = "POST"
    """


    """
    REQUEST_METHOD_HEAD = "HEAD"
    """


    """
    REQUEST_METHOD_PUT = "PUT"
    """


    """
    REQUEST_VERSION_1_0 = "HTTP_VERSION_1_0"
    """


    """
    REQUEST_VERSION_1_1 = "HTTP_VERSION_1_1"
    """


    """
    REQUEST_VERSION_2_0 = "HTTP_VERSION_2_0"
    """


    """



    _canonical_to_pep_names = {
                            'request_body': 'request_body',
                            'request_headers': 'request_headers',
                            'request_method': 'request_method',
                            'request_url': 'request_url',
                            'request_version': 'request_version',
                            'response_body': 'response_body',
                            'response_status_codes': 'response_status_codes',
                            'server_ssl_profile_binding': 'server_ssl_profile_binding',
                            'fall_count': 'fall_count',
                            'interval': 'interval',
                            'monitor_port': 'monitor_port',
                            'rise_count': 'rise_count',
                            'timeout': 'timeout',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            }

    def __init__(self,
                 request_body=None,
                 request_headers=None,
                 request_method=None,
                 request_url=None,
                 request_version=None,
                 response_body=None,
                 response_status_codes=None,
                 server_ssl_profile_binding=None,
                 fall_count=None,
                 interval=None,
                 monitor_port=None,
                 rise_count=None,
                 timeout=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                ):
        """
        :type  request_body: :class:`str` or ``None``
        :param request_body: String to send as part of HTTP health check request body. Valid
            only for certain HTTP methods like POST.
        :type  request_headers: :class:`list` of :class:`LbHttpRequestHeader` or ``None``
        :param request_headers: Array of HTTP request headers.
        :type  request_method: :class:`str` or ``None``
        :param request_method: Possible values are: 
            
            * :attr:`LBHttpsMonitorProfile.REQUEST_METHOD_GET`
            * :attr:`LBHttpsMonitorProfile.REQUEST_METHOD_OPTIONS`
            * :attr:`LBHttpsMonitorProfile.REQUEST_METHOD_POST`
            * :attr:`LBHttpsMonitorProfile.REQUEST_METHOD_HEAD`
            * :attr:`LBHttpsMonitorProfile.REQUEST_METHOD_PUT`
            
             The health check method for HTTP monitor type.
        :type  request_url: :class:`str` or ``None``
        :param request_url: For HTTPS active healthchecks, the HTTPS request url sent can be
            customized and can include query parameters.
        :type  request_version: :class:`str` or ``None``
        :param request_version: Possible values are: 
            
            * :attr:`LBHttpsMonitorProfile.REQUEST_VERSION__1_0`
            * :attr:`LBHttpsMonitorProfile.REQUEST_VERSION__1_1`
            * :attr:`LBHttpsMonitorProfile.REQUEST_VERSION__2_0`
            
             HTTP request version.
        :type  response_body: :class:`str` or ``None``
        :param response_body: If HTTP response body match string (regular expressions not
            supported) is specified (using LBHttpMonitor.response_body) then
            the healthcheck HTTP response body is matched against the specified
            string and server is considered healthy only if there is a match.
            If the response body string is not specified, HTTP healthcheck is
            considered successful if the HTTP response status code is 2xx, but
            it can be configured to accept other status codes as successful.
        :type  response_status_codes: :class:`list` of :class:`long` or ``None``
        :param response_status_codes: The HTTP response status code should be a valid HTTP status code.
            format: int32
        :type  server_ssl_profile_binding: :class:`LBServerSslProfileBinding` or ``None``
        :param server_ssl_profile_binding: The setting is used when the monitor acts as an SSL client and
            establishing a connection to the backend server.
        :type  fall_count: :class:`long` or ``None``
        :param fall_count: Only if a healthcheck fails consecutively for a specified number of
            times, given with fall_count, to a member will the member status be
            marked DOWN. format: int64
        :type  interval: :class:`long` or ``None``
        :param interval: Active healthchecks are initiated periodically, at a configurable
            interval (in seconds), to each member of the Group. format: int64
        :type  monitor_port: :class:`long` or ``None``
        :param monitor_port: Typically, monitors perform healthchecks to Group members using the
            member IP address and pool_port. However, in some cases, customers
            prefer to run healthchecks against a different port than the pool
            member port which handles actual application traffic. In such
            cases, the port to run healthchecks against can be specified in the
            monitor_port value. For ICMP monitor, monitor_port is not required.
            format: int32
        :type  rise_count: :class:`long` or ``None``
        :param rise_count: Once a member is DOWN, a specified number of consecutive successful
            healthchecks specified by rise_count will bring the member back to
            UP state. format: int64
        :type  timeout: :class:`long` or ``None``
        :param timeout: Timeout specified in seconds. After a healthcheck is initiated, if
            it does not complete within a certain period, then also the
            healthcheck is considered to be unsuccessful. Completing a
            healthcheck within timeout means establishing a connection (TCP or
            SSL), if applicable, sending the request and receiving the
            response, all within the configured timeout. format: int64
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`LBMonitorProfile.RESOURCE_TYPE_LBTCPMONITORPROFILE`
            * :attr:`LBMonitorProfile.RESOURCE_TYPE_LBUDPMONITORPROFILE`
            * :attr:`LBMonitorProfile.RESOURCE_TYPE_LBICMPMONITORPROFILE`
            * :attr:`LBMonitorProfile.RESOURCE_TYPE_LBHTTPMONITORPROFILE`
            * :attr:`LBMonitorProfile.RESOURCE_TYPE_LBHTTPSMONITORPROFILE`
            * :attr:`LBMonitorProfile.RESOURCE_TYPE_LBPASSIVEMONITORPROFILE`
            
            There are two types of healthchecks: active and passive. Passive
            healthchecks depend on failures in actual client traffic (e.g. RST
            from server in response to a client connection) to detect that the
            server or the application is down. In case of active healthchecks,
            load balancer itself initiates new connections (or sends ICMP ping)
            to the servers periodically to check their health, completely
            independent of any data traffic. Currently, active health monitors
            are supported for HTTP, HTTPS, TCP, UDP and ICMP protocols.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.request_body = request_body
        self.request_headers = request_headers
        self.request_method = request_method
        self.request_url = request_url
        self.request_version = request_version
        self.response_body = response_body
        self.response_status_codes = response_status_codes
        self.server_ssl_profile_binding = server_ssl_profile_binding
        self.fall_count = fall_count
        self.interval = interval
        self.monitor_port = monitor_port
        self.rise_count = rise_count
        self.timeout = timeout
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

LBHttpsMonitorProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_https_monitor_profile', {
        'request_body': type.OptionalType(type.StringType()),
        'request_headers': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'LbHttpRequestHeader'))),
        'request_method': type.OptionalType(type.StringType()),
        'request_url': type.OptionalType(type.StringType()),
        'request_version': type.OptionalType(type.StringType()),
        'response_body': type.OptionalType(type.StringType()),
        'response_status_codes': type.OptionalType(type.ListType(type.IntegerType())),
        'server_ssl_profile_binding': type.OptionalType(type.ReferenceType(__name__, 'LBServerSslProfileBinding')),
        'fall_count': type.OptionalType(type.IntegerType()),
        'interval': type.OptionalType(type.IntegerType()),
        'monitor_port': type.OptionalType(type.IntegerType()),
        'rise_count': type.OptionalType(type.IntegerType()),
        'timeout': type.OptionalType(type.IntegerType()),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
    },
    LBHttpsMonitorProfile,
    False,
    None))



class LBIcmpMonitorProfile(VapiStruct):
    """
    Active healthchecks are disabled by default and can be enabled for a server
    pool by binding a health monitor to the Group through the LBRule object.
    This represents active health monitoring over ICMP. Active healthchecks are
    initiated periodically, at a configurable interval, to each member of the
    Group. Only if a healthcheck fails consecutively for a specified number of
    times (fall_count) to a member will the member status be marked DOWN. Once
    a member is DOWN, a specified number of consecutive successful healt
    hchecks (rise_count) will bring the member back to UP state. After a
    healthcheck is initiated, if it does not complete within a certain period,
    then also the healthcheck is considered to be unsuccessful. Completing a
    healthcheck within timeout means establishing a connection (TCP or SSL), if
    applicable, sending the request and receiving the response, all within the
    configured timeout.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'data_length': 'data_length',
                            'fall_count': 'fall_count',
                            'interval': 'interval',
                            'monitor_port': 'monitor_port',
                            'rise_count': 'rise_count',
                            'timeout': 'timeout',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            }

    def __init__(self,
                 data_length=None,
                 fall_count=None,
                 interval=None,
                 monitor_port=None,
                 rise_count=None,
                 timeout=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                ):
        """
        :type  data_length: :class:`long` or ``None``
        :param data_length: The data size (in byte) of the ICMP healthcheck packet format:
            int64
        :type  fall_count: :class:`long` or ``None``
        :param fall_count: Only if a healthcheck fails consecutively for a specified number of
            times, given with fall_count, to a member will the member status be
            marked DOWN. format: int64
        :type  interval: :class:`long` or ``None``
        :param interval: Active healthchecks are initiated periodically, at a configurable
            interval (in seconds), to each member of the Group. format: int64
        :type  monitor_port: :class:`long` or ``None``
        :param monitor_port: Typically, monitors perform healthchecks to Group members using the
            member IP address and pool_port. However, in some cases, customers
            prefer to run healthchecks against a different port than the pool
            member port which handles actual application traffic. In such
            cases, the port to run healthchecks against can be specified in the
            monitor_port value. For ICMP monitor, monitor_port is not required.
            format: int32
        :type  rise_count: :class:`long` or ``None``
        :param rise_count: Once a member is DOWN, a specified number of consecutive successful
            healthchecks specified by rise_count will bring the member back to
            UP state. format: int64
        :type  timeout: :class:`long` or ``None``
        :param timeout: Timeout specified in seconds. After a healthcheck is initiated, if
            it does not complete within a certain period, then also the
            healthcheck is considered to be unsuccessful. Completing a
            healthcheck within timeout means establishing a connection (TCP or
            SSL), if applicable, sending the request and receiving the
            response, all within the configured timeout. format: int64
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`LBMonitorProfile.RESOURCE_TYPE_LBTCPMONITORPROFILE`
            * :attr:`LBMonitorProfile.RESOURCE_TYPE_LBUDPMONITORPROFILE`
            * :attr:`LBMonitorProfile.RESOURCE_TYPE_LBICMPMONITORPROFILE`
            * :attr:`LBMonitorProfile.RESOURCE_TYPE_LBHTTPMONITORPROFILE`
            * :attr:`LBMonitorProfile.RESOURCE_TYPE_LBHTTPSMONITORPROFILE`
            * :attr:`LBMonitorProfile.RESOURCE_TYPE_LBPASSIVEMONITORPROFILE`
            
            There are two types of healthchecks: active and passive. Passive
            healthchecks depend on failures in actual client traffic (e.g. RST
            from server in response to a client connection) to detect that the
            server or the application is down. In case of active healthchecks,
            load balancer itself initiates new connections (or sends ICMP ping)
            to the servers periodically to check their health, completely
            independent of any data traffic. Currently, active health monitors
            are supported for HTTP, HTTPS, TCP, UDP and ICMP protocols.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.data_length = data_length
        self.fall_count = fall_count
        self.interval = interval
        self.monitor_port = monitor_port
        self.rise_count = rise_count
        self.timeout = timeout
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

LBIcmpMonitorProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_icmp_monitor_profile', {
        'data_length': type.OptionalType(type.IntegerType()),
        'fall_count': type.OptionalType(type.IntegerType()),
        'interval': type.OptionalType(type.IntegerType()),
        'monitor_port': type.OptionalType(type.IntegerType()),
        'rise_count': type.OptionalType(type.IntegerType()),
        'timeout': type.OptionalType(type.IntegerType()),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
    },
    LBIcmpMonitorProfile,
    False,
    None))



class LBIpHeaderCondition(VapiStruct):
    """
    This condition is used to match IP header fields of HTTP messages. Either
    source_address or group_id should be specified.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "LBIpHeaderCondition"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'group_path': 'group_path',
                            'source_address': 'source_address',
                            'inverse': 'inverse',
                            'type': 'type',
                            }

    def __init__(self,
                 group_path=None,
                 source_address=None,
                 inverse=None,
                 type='LBIpHeaderCondition',
                ):
        """
        :type  group_path: :class:`str` or ``None``
        :param group_path: Source IP address of HTTP message should match IP addresses which
            are configured in Group in order to perform actions.
        :type  source_address: :class:`str` or ``None``
        :param source_address: Source IP address of HTTP message. IP Address can be expressed as a
            single IP address like 10.1.1.1, or a range of IP addresses like
            10.1.1.101-10.1.1.160. Both IPv4 and IPv6 addresses are supported.
            format: address-or-block-or-range
        :type  inverse: :class:`bool` or ``None``
        :param inverse: A flag to indicate whether reverse the match result of this
            condition
        :type  type: :class:`str`
        :param type: Possible values are: 
            
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTURICONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTHEADERCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTMETHODCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTURIARGUMENTSCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTVERSIONCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTCOOKIECONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTBODYCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPRESPONSEHEADERCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBTCPHEADERCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBIPHEADERCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBVARIABLECONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPSSLCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBSSLSNICONDITION`
            
             Type of load balancer rule condition
        """
        self.group_path = group_path
        self.source_address = source_address
        self.inverse = inverse
        self._type = type
        VapiStruct.__init__(self)

    @property
    def type(self):
        """
        Return the discriminator value
        """
        return self._type

LBIpHeaderCondition._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_ip_header_condition', {
        'group_path': type.OptionalType(type.StringType()),
        'source_address': type.OptionalType(type.StringType()),
        'inverse': type.OptionalType(type.BooleanType()),
        'type': type.StringType(),
    },
    LBIpHeaderCondition,
    False,
    None))



class LBJwtAuthAction(VapiStruct):
    """
    This action is used to control access to backend server resources using
    JSON Web Token(JWT) authentication. The JWT authentication is done before
    any HTTP manipulation if the HTTP request matches the given condition in
    LBRule. Any verification failed, the HTTP process will be terminated, and
    HTTP response with 401 status code and WWW-Authentication header will be
    returned to client.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "LBJwtAuthAction"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'key': 'key',
                            'pass_jwt_to_pool': 'pass_jwt_to_pool',
                            'realm': 'realm',
                            'tokens': 'tokens',
                            'type': 'type',
                            }

    def __init__(self,
                 key=None,
                 pass_jwt_to_pool=None,
                 realm=None,
                 tokens=None,
                 type='LBJwtAuthAction',
                ):
        """
        :type  key: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param key: LBJwtKey used for verifying the signature of JWT token
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`LBJwtKey`. When methods return a value of this class as a
            return value, the attribute will contain all the attributes defined
            in :class:`LBJwtKey`.
        :type  pass_jwt_to_pool: :class:`bool` or ``None``
        :param pass_jwt_to_pool: Specify whether to pass the JWT to backend server or remove it. By
            default, it is false which means will not pass the JWT to backend
            servers.
        :type  realm: :class:`str` or ``None``
        :param realm: A description of the protected area. If no realm is specified,
            clients often display a formatted hostname instead. The configured
            realm is returned when client request is rejected with 401 http
            status. In the response, it will be \"WWW-Authentication: Bearer
            realm=<realm>\".
        :type  tokens: :class:`list` of :class:`str` or ``None``
        :param tokens: JWT is an open standard that defines a compact and self-contained
            way for securely transmitting information between parties as a JSON
            object. Load balancer will search for every specified tokens one by
            one for the jwt message until found. This parameter is optional. In
            case not found or this field is not configured, load balancer
            searches the Bearer header by default in the http request
            \"Authorization: Bearer <token>\".
        :type  type: :class:`str`
        :param type: Possible values are: 
            
            * :attr:`LBRuleAction.TYPE_LBSELECTPOOLACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPREQUESTURIREWRITEACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPREQUESTHEADERREWRITEACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPREJECTACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPREDIRECTACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPRESPONSEHEADERREWRITEACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPREQUESTHEADERDELETEACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPRESPONSEHEADERDELETEACTION`
            * :attr:`LBRuleAction.TYPE_LBVARIABLEASSIGNMENTACTION`
            * :attr:`LBRuleAction.TYPE_LBVARIABLEPERSISTENCEONACTION`
            * :attr:`LBRuleAction.TYPE_LBVARIABLEPERSISTENCELEARNACTION`
            * :attr:`LBRuleAction.TYPE_LBJWTAUTHACTION`
            * :attr:`LBRuleAction.TYPE_LBSSLMODESELECTIONACTION`
            * :attr:`LBRuleAction.TYPE_LBCONNECTIONDROPACTION`
            
             The property identifies the load balancer rule action type.
        """
        self.key = key
        self.pass_jwt_to_pool = pass_jwt_to_pool
        self.realm = realm
        self.tokens = tokens
        self._type = type
        VapiStruct.__init__(self)

    @property
    def type(self):
        """
        Return the discriminator value
        """
        return self._type

LBJwtAuthAction._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_jwt_auth_action', {
        'key': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'LBJwtKey')])),
        'pass_jwt_to_pool': type.OptionalType(type.BooleanType()),
        'realm': type.OptionalType(type.StringType()),
        'tokens': type.OptionalType(type.ListType(type.StringType())),
        'type': type.StringType(),
    },
    LBJwtAuthAction,
    False,
    None))



class LBJwtCertificateKey(VapiStruct):
    """
    The key is used to specify certificate which is used to verify the
    signature of JWT tokens.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "LBJwtCertificateKey"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'certificate_path': 'certificate_path',
                            'type': 'type',
                            }

    def __init__(self,
                 certificate_path=None,
                 type='LBJwtCertificateKey',
                ):
        """
        :type  certificate_path: :class:`str` or ``None``
        :param certificate_path: Certificate identifier
        :type  type: :class:`str`
        :param type: Possible values are: 
            
            * :attr:`LBJwtKey.TYPE_LBJWTCERTIFICATEKEY`
            * :attr:`LBJwtKey.TYPE_LBJWTSYMMETRICKEY`
            * :attr:`LBJwtKey.TYPE_LBJWTPUBLICKEY`
            
             The property is used to identify JWT key type.
        """
        self.certificate_path = certificate_path
        self._type = type
        VapiStruct.__init__(self)

    @property
    def type(self):
        """
        Return the discriminator value
        """
        return self._type

LBJwtCertificateKey._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_jwt_certificate_key', {
        'certificate_path': type.OptionalType(type.StringType()),
        'type': type.StringType(),
    },
    LBJwtCertificateKey,
    False,
    None))



class LBJwtKey(VapiStruct):
    """
    LBJwtKey specifies the symmetric key or asymmetric public key used to
    decrypt the data in JWT.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "LBJwtKey"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    TYPE_LBJWTCERTIFICATEKEY = "LBJwtCertificateKey"
    """


    """
    TYPE_LBJWTSYMMETRICKEY = "LBJwtSymmetricKey"
    """


    """
    TYPE_LBJWTPUBLICKEY = "LBJwtPublicKey"
    """


    """



    _canonical_to_pep_names = {
                            'type': 'type',
                            }

    def __init__(self,
                 type='LBJwtKey',
                ):
        """
        :type  type: :class:`str`
        :param type: Possible values are: 
            
            * :attr:`LBJwtKey.TYPE_LBJWTCERTIFICATEKEY`
            * :attr:`LBJwtKey.TYPE_LBJWTSYMMETRICKEY`
            * :attr:`LBJwtKey.TYPE_LBJWTPUBLICKEY`
            
             The property is used to identify JWT key type.
        """
        self._type = type
        VapiStruct.__init__(self)

    @property
    def type(self):
        """
        Return the discriminator value
        """
        return self._type

LBJwtKey._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_jwt_key', {
        'type': type.StringType(),
    },
    LBJwtKey,
    False,
    None))



class LBJwtPublicKey(VapiStruct):
    """
    The key is used to specify the public key content which is used to verify
    the signature of JWT tokens.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "LBJwtPublicKey"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'public_key_content': 'public_key_content',
                            'type': 'type',
                            }

    def __init__(self,
                 public_key_content=None,
                 type='LBJwtPublicKey',
                ):
        """
        :type  public_key_content: :class:`str` or ``None``
        :param public_key_content: Content of public key
        :type  type: :class:`str`
        :param type: Possible values are: 
            
            * :attr:`LBJwtKey.TYPE_LBJWTCERTIFICATEKEY`
            * :attr:`LBJwtKey.TYPE_LBJWTSYMMETRICKEY`
            * :attr:`LBJwtKey.TYPE_LBJWTPUBLICKEY`
            
             The property is used to identify JWT key type.
        """
        self.public_key_content = public_key_content
        self._type = type
        VapiStruct.__init__(self)

    @property
    def type(self):
        """
        Return the discriminator value
        """
        return self._type

LBJwtPublicKey._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_jwt_public_key', {
        'public_key_content': type.OptionalType(type.StringType()),
        'type': type.StringType(),
    },
    LBJwtPublicKey,
    False,
    None))



class LBJwtSymmetricKey(VapiStruct):
    """
    The key is used to specify the symmetric key which is used to verify the
    signature of JWT tokens.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "LBJwtSymmetricKey"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'type': 'type',
                            }

    def __init__(self,
                 type='LBJwtSymmetricKey',
                ):
        """
        :type  type: :class:`str`
        :param type: Possible values are: 
            
            * :attr:`LBJwtKey.TYPE_LBJWTCERTIFICATEKEY`
            * :attr:`LBJwtKey.TYPE_LBJWTSYMMETRICKEY`
            * :attr:`LBJwtKey.TYPE_LBJWTPUBLICKEY`
            
             The property is used to identify JWT key type.
        """
        self._type = type
        VapiStruct.__init__(self)

    @property
    def type(self):
        """
        Return the discriminator value
        """
        return self._type

LBJwtSymmetricKey._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_jwt_symmetric_key', {
        'type': type.StringType(),
    },
    LBJwtSymmetricKey,
    False,
    None))



class LBMonitorProfile(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "LBMonitorProfile"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    RESOURCE_TYPE_LBTCPMONITORPROFILE = "LBTcpMonitorProfile"
    """


    """
    RESOURCE_TYPE_LBUDPMONITORPROFILE = "LBUdpMonitorProfile"
    """


    """
    RESOURCE_TYPE_LBICMPMONITORPROFILE = "LBIcmpMonitorProfile"
    """


    """
    RESOURCE_TYPE_LBHTTPMONITORPROFILE = "LBHttpMonitorProfile"
    """


    """
    RESOURCE_TYPE_LBHTTPSMONITORPROFILE = "LBHttpsMonitorProfile"
    """


    """
    RESOURCE_TYPE_LBPASSIVEMONITORPROFILE = "LBPassiveMonitorProfile"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='LBMonitorProfile',
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`LBMonitorProfile.RESOURCE_TYPE_LBTCPMONITORPROFILE`
            * :attr:`LBMonitorProfile.RESOURCE_TYPE_LBUDPMONITORPROFILE`
            * :attr:`LBMonitorProfile.RESOURCE_TYPE_LBICMPMONITORPROFILE`
            * :attr:`LBMonitorProfile.RESOURCE_TYPE_LBHTTPMONITORPROFILE`
            * :attr:`LBMonitorProfile.RESOURCE_TYPE_LBHTTPSMONITORPROFILE`
            * :attr:`LBMonitorProfile.RESOURCE_TYPE_LBPASSIVEMONITORPROFILE`
            
            There are two types of healthchecks: active and passive. Passive
            healthchecks depend on failures in actual client traffic (e.g. RST
            from server in response to a client connection) to detect that the
            server or the application is down. In case of active healthchecks,
            load balancer itself initiates new connections (or sends ICMP ping)
            to the servers periodically to check their health, completely
            independent of any data traffic. Currently, active health monitors
            are supported for HTTP, HTTPS, TCP, UDP and ICMP protocols.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

LBMonitorProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_monitor_profile', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
    },
    LBMonitorProfile,
    False,
    None))



class LBMonitorProfileListResult(VapiStruct):
    """
    Paged Collection of LBMonitorProfiles

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param results: LBMonitorProfile list results
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`LBMonitorProfile`. When methods return a value of this
            class as a return value, the attribute will contain all the
            attributes defined in :class:`LBMonitorProfile`.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


LBMonitorProfileListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_monitor_profile_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'LBMonitorProfile')]))),
    },
    LBMonitorProfileListResult,
    False,
    None))



class LBNodeCountPerSeverity(VapiStruct):
    """
    The node count for specific load balancer usage severity.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    SEVERITY_GREEN = "GREEN"
    """


    """
    SEVERITY_ORANGE = "ORANGE"
    """


    """
    SEVERITY_RED = "RED"
    """


    """



    _canonical_to_pep_names = {
                            'node_count': 'node_count',
                            'severity': 'severity',
                            }

    def __init__(self,
                 node_count=None,
                 severity=None,
                ):
        """
        :type  node_count: :class:`long` or ``None``
        :param node_count: Node count for specific serverity. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  severity: :class:`str` or ``None``
        :param severity: Possible values are: 
            
            * :attr:`LBNodeCountPerSeverity.SEVERITY_GREEN`
            * :attr:`LBNodeCountPerSeverity.SEVERITY_ORANGE`
            * :attr:`LBNodeCountPerSeverity.SEVERITY_RED`
            
            The severity calculation is based on current credit usage
            percentage of load balancer for one node.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.node_count = node_count
        self.severity = severity
        VapiStruct.__init__(self)


LBNodeCountPerSeverity._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_node_count_per_severity', {
        'node_count': type.OptionalType(type.IntegerType()),
        'severity': type.OptionalType(type.StringType()),
    },
    LBNodeCountPerSeverity,
    False,
    None))



class LBNodeUsage(VapiStruct):
    """
    Node usage for load balancer contains basic information and LB entity
    usages and capacity for the given node. Only edge node is supported.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "LBNodeUsage"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'node_path': 'node_path',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 node_path=None,
                 resource_type='LBNodeUsage',
                ):
        """
        :type  node_path: :class:`str` or ``None``
        :param node_path: The property identifies the node path for load balancer node usage.
            For example,
            node_path=/infra/sites/default/enforcement-points/default
            /edge-clusters/85175e0b-4d74-461d-83e1-f3b785adef9c/edge-nodes
            /86e077c0-449f-11e9-87c8-02004eb37029.
        :type  resource_type: :class:`str`
        :param resource_type: The property identifies the load balancer node usage type.
        """
        self.node_path = node_path
        self._resource_type = resource_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

LBNodeUsage._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_node_usage', {
        'node_path': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
    },
    LBNodeUsage,
    False,
    None))



class LBNodeUsageSummary(VapiStruct):
    """
    The load balancer node usage summary for all nodes from specific
    enforcement point. Only edge node is supported. The summary contains all
    edge nodes which are configured in edge clusters.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    SEVERITY_GREEN = "GREEN"
    """


    """
    SEVERITY_ORANGE = "ORANGE"
    """


    """
    SEVERITY_RED = "RED"
    """


    """



    _canonical_to_pep_names = {
                            'alarm': 'alarm',
                            'enforcement_point_path': 'enforcement_point_path',
                            'current_load_balancer_credits': 'current_load_balancer_credits',
                            'current_pool_member_count': 'current_pool_member_count',
                            'load_balancer_credit_capacity': 'load_balancer_credit_capacity',
                            'node_counts': 'node_counts',
                            'node_usages': 'node_usages',
                            'pool_member_capacity': 'pool_member_capacity',
                            'severity': 'severity',
                            'usage_percentage': 'usage_percentage',
                            }

    def __init__(self,
                 alarm=None,
                 enforcement_point_path=None,
                 current_load_balancer_credits=None,
                 current_pool_member_count=None,
                 load_balancer_credit_capacity=None,
                 node_counts=None,
                 node_usages=None,
                 pool_member_capacity=None,
                 severity=None,
                 usage_percentage=None,
                ):
        """
        :type  alarm: :class:`PolicyRuntimeAlarm` or ``None``
        :param alarm: Alarm information details.
        :type  enforcement_point_path: :class:`str` or ``None``
        :param enforcement_point_path: Policy Path referencing the enforcement point where the info is
            fetched.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  current_load_balancer_credits: :class:`long` or ``None``
        :param current_load_balancer_credits: Current load balancer credits in use for all nodes. For example,
            configuring a medium load balancer on a node consumes 10 credits.
            If there are 2 medium instances configured, the current load
            balancer credit number is 2 \* 10 = 20. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  current_pool_member_count: :class:`long` or ``None``
        :param current_pool_member_count: The overall count of pool members configured on all nodes. format:
            int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  load_balancer_credit_capacity: :class:`long` or ``None``
        :param load_balancer_credit_capacity: The load balancer credit capacity means the maximum credits which
            can be used for load balancer service configuration for all nodes.
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  node_counts: :class:`list` of :class:`LBNodeCountPerSeverity` or ``None``
        :param node_counts: The property identifies array of node count for each severity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  node_usages: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param node_usages: The property identifies all LB node usages. By default, it is not
            included in response. It exists when parameter
            ?include_usages=true.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`LBNodeUsage`. When methods return a value of this class as
            a return value, the attribute will contain all the attributes
            defined in :class:`LBNodeUsage`.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  pool_member_capacity: :class:`long` or ``None``
        :param pool_member_capacity: Pool member capacity means maximum number of pool members which can
            be configured on all nodes. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  severity: :class:`str` or ``None``
        :param severity: Possible values are: 
            
            * :attr:`LBNodeUsageSummary.SEVERITY_GREEN`
            * :attr:`LBNodeUsageSummary.SEVERITY_ORANGE`
            * :attr:`LBNodeUsageSummary.SEVERITY_RED`
            
            The severity calculation is based on overall credit usage
            percentage of load balancer for all nodes.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  usage_percentage: :class:`float` or ``None``
        :param usage_percentage: The overall usage percentage of all nodes for load balancer. The
            value is the larger value between overall pool member usage
            percentage and overall load balancer credit usage percentage.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.alarm = alarm
        self.enforcement_point_path = enforcement_point_path
        self.current_load_balancer_credits = current_load_balancer_credits
        self.current_pool_member_count = current_pool_member_count
        self.load_balancer_credit_capacity = load_balancer_credit_capacity
        self.node_counts = node_counts
        self.node_usages = node_usages
        self.pool_member_capacity = pool_member_capacity
        self.severity = severity
        self.usage_percentage = usage_percentage
        VapiStruct.__init__(self)


LBNodeUsageSummary._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_node_usage_summary', {
        'alarm': type.OptionalType(type.ReferenceType(__name__, 'PolicyRuntimeAlarm')),
        'enforcement_point_path': type.OptionalType(type.StringType()),
        'current_load_balancer_credits': type.OptionalType(type.IntegerType()),
        'current_pool_member_count': type.OptionalType(type.IntegerType()),
        'load_balancer_credit_capacity': type.OptionalType(type.IntegerType()),
        'node_counts': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'LBNodeCountPerSeverity'))),
        'node_usages': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'LBNodeUsage')]))),
        'pool_member_capacity': type.OptionalType(type.IntegerType()),
        'severity': type.OptionalType(type.StringType()),
        'usage_percentage': type.OptionalType(type.DoubleType()),
    },
    LBNodeUsageSummary,
    False,
    None))



class LBPassiveMonitorProfile(VapiStruct):
    """
    The passive type of LBMonitorProfile.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "LBPassiveMonitorProfile"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'max_fails': 'max_fails',
                            'timeout': 'timeout',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            }

    def __init__(self,
                 max_fails=None,
                 timeout=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='LBPassiveMonitorProfile',
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                ):
        """
        :type  max_fails: :class:`long` or ``None``
        :param max_fails: When the consecutive failures reach this value, then the member is
            considered temporarily unavailable for a configurable period
            format: int64
        :type  timeout: :class:`long` or ``None``
        :param timeout: After this timeout period, the member is tried again for a new
            connection to see if it is available. format: int64
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`LBMonitorProfile.RESOURCE_TYPE_LBTCPMONITORPROFILE`
            * :attr:`LBMonitorProfile.RESOURCE_TYPE_LBUDPMONITORPROFILE`
            * :attr:`LBMonitorProfile.RESOURCE_TYPE_LBICMPMONITORPROFILE`
            * :attr:`LBMonitorProfile.RESOURCE_TYPE_LBHTTPMONITORPROFILE`
            * :attr:`LBMonitorProfile.RESOURCE_TYPE_LBHTTPSMONITORPROFILE`
            * :attr:`LBMonitorProfile.RESOURCE_TYPE_LBPASSIVEMONITORPROFILE`
            
            There are two types of healthchecks: active and passive. Passive
            healthchecks depend on failures in actual client traffic (e.g. RST
            from server in response to a client connection) to detect that the
            server or the application is down. In case of active healthchecks,
            load balancer itself initiates new connections (or sends ICMP ping)
            to the servers periodically to check their health, completely
            independent of any data traffic. Currently, active health monitors
            are supported for HTTP, HTTPS, TCP, UDP and ICMP protocols.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.max_fails = max_fails
        self.timeout = timeout
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

LBPassiveMonitorProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_passive_monitor_profile', {
        'max_fails': type.OptionalType(type.IntegerType()),
        'timeout': type.OptionalType(type.IntegerType()),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
    },
    LBPassiveMonitorProfile,
    False,
    None))



class LBPersistenceCookieTime(VapiStruct):
    """
    Persistence cookie time.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "LBPersistenceCookieTime"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'cookie_max_idle': 'cookie_max_idle',
                            'type': 'type',
                            }

    def __init__(self,
                 cookie_max_idle=None,
                 type='LBPersistenceCookieTime',
                ):
        """
        :type  cookie_max_idle: :class:`long` or ``None``
        :param cookie_max_idle: HTTP cookie max-age to expire cookie, only available for insert
            mode. format: int64
        :type  type: :class:`str`
        :param type: Possible values are: 
            
            * :attr:`LBCookieTime.TYPE_LBSESSIONCOOKIETIME`
            * :attr:`LBCookieTime.TYPE_LBPERSISTENCECOOKIETIME`
            
            Both session cookie and persistence cookie are supported, Use
            LbSessionCookieTime for session cookie time setting, Use
            LbPersistenceCookieTime for persistence cookie time setting
        """
        self.cookie_max_idle = cookie_max_idle
        self._type = type
        VapiStruct.__init__(self)

    @property
    def type(self):
        """
        Return the discriminator value
        """
        return self._type

LBPersistenceCookieTime._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_persistence_cookie_time', {
        'cookie_max_idle': type.OptionalType(type.IntegerType()),
        'type': type.StringType(),
    },
    LBPersistenceCookieTime,
    False,
    None))



class LBPersistenceProfile(VapiStruct):
    """
    Some applications maintain state and require all relevant connections to be
    sent to the same server as the application state is not synchronized among
    servers. Persistence is enabled on a LBVirtualServer by binding a
    persistence profile to it. LBGenericPersistenceProfile cannot be attached
    to LBVirtualServer directly, it can be specified in
    LBVariablePersistenceOnAction or LBVariablePersistenceLearnAction in
    LBRule. If a user attaches a LBGenericPersistenceProfile directly to a
    virtual server, the operation is rejected.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "LBPersistenceProfile"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    RESOURCE_TYPE_LBSOURCEIPPERSISTENCEPROFILE = "LBSourceIpPersistenceProfile"
    """


    """
    RESOURCE_TYPE_LBCOOKIEPERSISTENCEPROFILE = "LBCookiePersistenceProfile"
    """


    """
    RESOURCE_TYPE_LBGENERICPERSISTENCEPROFILE = "LBGenericPersistenceProfile"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'persistence_shared': 'persistence_shared',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='LBPersistenceProfile',
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 persistence_shared=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`LBPersistenceProfile.RESOURCE_TYPE_LBSOURCEIPPERSISTENCEPROFILE`
            *
              :attr:`LBPersistenceProfile.RESOURCE_TYPE_LBCOOKIEPERSISTENCEPROFILE`
            *
              :attr:`LBPersistenceProfile.RESOURCE_TYPE_LBGENERICPERSISTENCEPROFILE`
            
             The resource_type property identifies persistence profile type.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  persistence_shared: :class:`bool` or ``None``
        :param persistence_shared: Persistence shared setting indicates that all LBVirtualServers that
            consume this LBPersistenceProfile should share the same persistence
            mechanism when enabled. Meaning, persistence entries of a client
            accessing one virtual server will also affect the same client's
            connections to a different virtual server. For example, say there
            are two virtual servers vip-ip1:80 and vip-ip1:8080 bound to the
            same Group g1 consisting of two servers (s11:80 and s12:80). By
            default, each virtual server will have its own persistence table or
            cookie. So, in the earlier example, there will be two tables
            (vip-ip1:80, p1) and (vip-ip1:8080, p1) or cookies. So, if a client
            connects to vip1:80 and later connects to vip1:8080, the second
            connection may be sent to a different server than the first. When
            persistence_shared is enabled, then the second connection will
            always connect to the same server as the original connection. For
            COOKIE persistence type, the same cookie will be shared by multiple
            virtual servers. For SOURCE_IP persistence type, the persistence
            table will be shared across virtual servers. For GENERIC
            persistence type, the persistence table will be shared across
            virtual servers which consume the same persistence profile in
            LBRule actions.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.persistence_shared = persistence_shared
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

LBPersistenceProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_persistence_profile', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'persistence_shared': type.OptionalType(type.BooleanType()),
    },
    LBPersistenceProfile,
    False,
    None))



class LBPersistenceProfileListResult(VapiStruct):
    """
    Paged Collection of LBPersistenceProfiles

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param results: LBPersistenceProfile list results
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`LBPersistenceProfile`. When methods return a value of this
            class as a return value, the attribute will contain all the
            attributes defined in :class:`LBPersistenceProfile`.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


LBPersistenceProfileListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_persistence_profile_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'LBPersistenceProfile')]))),
    },
    LBPersistenceProfileListResult,
    False,
    None))



class LBPool(VapiStruct):
    """
    Defining access of a Group from a LBVirtualServer and binding to
    LBMonitorProfile.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    ALGORITHM_ROUND_ROBIN = "ROUND_ROBIN"
    """


    """
    ALGORITHM_WEIGHTED_ROUND_ROBIN = "WEIGHTED_ROUND_ROBIN"
    """


    """
    ALGORITHM_LEAST_CONNECTION = "LEAST_CONNECTION"
    """


    """
    ALGORITHM_WEIGHTED_LEAST_CONNECTION = "WEIGHTED_LEAST_CONNECTION"
    """


    """
    ALGORITHM_IP_HASH = "IP_HASH"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'active_monitor_paths': 'active_monitor_paths',
                            'algorithm': 'algorithm',
                            'member_group': 'member_group',
                            'members': 'members',
                            'min_active_members': 'min_active_members',
                            'passive_monitor_path': 'passive_monitor_path',
                            'snat_translation': 'snat_translation',
                            'tcp_multiplexing_enabled': 'tcp_multiplexing_enabled',
                            'tcp_multiplexing_number': 'tcp_multiplexing_number',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 active_monitor_paths=None,
                 algorithm=None,
                 member_group=None,
                 members=None,
                 min_active_members=None,
                 passive_monitor_path=None,
                 snat_translation=None,
                 tcp_multiplexing_enabled=None,
                 tcp_multiplexing_number=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  active_monitor_paths: :class:`list` of :class:`str` or ``None``
        :param active_monitor_paths: In case of active healthchecks, load balancer itself initiates new
            connections (or sends ICMP ping) to the servers periodically to
            check their health, completely independent of any data traffic.
            Active healthchecks are disabled by default and can be enabled for
            a server pool by binding a health monitor to the pool. If multiple
            active monitors are configured, the pool member status is UP only
            when the health check status for all the monitors are UP.
        :type  algorithm: :class:`str` or ``None``
        :param algorithm: Possible values are: 
            
            * :attr:`LBPool.ALGORITHM_ROUND_ROBIN`
            * :attr:`LBPool.ALGORITHM_WEIGHTED_ROUND_ROBIN`
            * :attr:`LBPool.ALGORITHM_LEAST_CONNECTION`
            * :attr:`LBPool.ALGORITHM_WEIGHTED_LEAST_CONNECTION`
            * :attr:`LBPool.ALGORITHM_IP_HASH`
            
            Load Balancing algorithm chooses a server for each new connection
            by going through the list of servers in the pool. Currently,
            following load balancing algorithms are supported with ROUND_ROBIN
            as the default. ROUND_ROBIN means that a server is selected in a
            round-robin fashion. The weight would be ignored even if it is
            configured. WEIGHTED_ROUND_ROBIN means that a server is selected in
            a weighted round-robin fashion. Default weight of 1 is used if
            weight is not configured. LEAST_CONNECTION means that a server is
            selected when it has the least number of connections. The weight
            would be ignored even if it is configured. Slow start would be
            enabled by default. WEIGHTED_LEAST_CONNECTION means that a server
            is selected in a weighted least connection fashion. Default weight
            of 1 is used if weight is not configured. Slow start would be
            enabled by default. IP_HASH means that consistent hash is performed
            on the source IP address of the incoming connection. This ensures
            that the same client IP address will always reach the same server
            as long as no server goes down or up. It may be used on the
            Internet to provide a best-effort stickiness to clients which
            refuse session cookies.
        :type  member_group: :class:`LBPoolMemberGroup` or ``None``
        :param member_group: Load balancer pool support grouping object as dynamic pool members.
            When member group is defined, members setting should not be
            specified.
        :type  members: :class:`list` of :class:`LBPoolMember` or ``None``
        :param members: Server pool consists of one or more pool members. Each pool member
            is identified, typically, by an IP address and a port.
        :type  min_active_members: :class:`long` or ``None``
        :param min_active_members: A pool is considered active if there are at least certain minimum
            number of members. format: int64
        :type  passive_monitor_path: :class:`str` or ``None``
        :param passive_monitor_path: Passive healthchecks are disabled by default and can be enabled by
            attaching a passive health monitor to a server pool. Each time a
            client connection to a pool member fails, its failed count is
            incremented. For pools bound to L7 virtual servers, a connection is
            considered to be failed and failed count is incremented if any TCP
            connection errors (e.g. TCP RST or failure to send data) or SSL
            handshake failures occur. For pools bound to L4 virtual servers, if
            no response is received to a TCP SYN sent to the pool member or if
            a TCP RST is received in response to a TCP SYN, then the pool
            member is considered to have failed and the failed count is
            incremented.
        :type  snat_translation: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param snat_translation: Depending on the topology, Source NAT (SNAT) may be required to
            ensure traffic from the server destined to the client is received
            by the load balancer. SNAT can be enabled per pool. If SNAT is not
            enabled for a pool, then load balancer uses the client IP and port
            (spoofing) while establishing connections to the servers. This is
            referred to as no-SNAT or TRANSPARENT mode. By default Source NAT
            is enabled as LBSnatAutoMap.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`LBSnatTranslation`. When methods return a value of this
            class as a return value, the attribute will contain all the
            attributes defined in :class:`LBSnatTranslation`.
        :type  tcp_multiplexing_enabled: :class:`bool` or ``None``
        :param tcp_multiplexing_enabled: TCP multiplexing allows the same TCP connection between load
            balancer and the backend server to be used for sending multiple
            client requests from different client TCP connections.
        :type  tcp_multiplexing_number: :class:`long` or ``None``
        :param tcp_multiplexing_number: The maximum number of TCP connections per pool that are idly kept
            alive for sending future client requests. format: int64
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.active_monitor_paths = active_monitor_paths
        self.algorithm = algorithm
        self.member_group = member_group
        self.members = members
        self.min_active_members = min_active_members
        self.passive_monitor_path = passive_monitor_path
        self.snat_translation = snat_translation
        self.tcp_multiplexing_enabled = tcp_multiplexing_enabled
        self.tcp_multiplexing_number = tcp_multiplexing_number
        VapiStruct.__init__(self)


LBPool._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_pool', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'active_monitor_paths': type.OptionalType(type.ListType(type.StringType())),
        'algorithm': type.OptionalType(type.StringType()),
        'member_group': type.OptionalType(type.ReferenceType(__name__, 'LBPoolMemberGroup')),
        'members': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'LBPoolMember'))),
        'min_active_members': type.OptionalType(type.IntegerType()),
        'passive_monitor_path': type.OptionalType(type.StringType()),
        'snat_translation': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'LBSnatTranslation')])),
        'tcp_multiplexing_enabled': type.OptionalType(type.BooleanType()),
        'tcp_multiplexing_number': type.OptionalType(type.IntegerType()),
    },
    LBPool,
    False,
    None))



class LBPoolListResult(VapiStruct):
    """
    Paged Collection of LBPool.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`LBPool` or ``None``
        :param results: LBPool list results.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


LBPoolListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_pool_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'LBPool'))),
    },
    LBPoolListResult,
    False,
    None))



class LBPoolMember(VapiStruct):
    """
    Pool member.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    ADMIN_STATE_ENABLED = "ENABLED"
    """


    """
    ADMIN_STATE_DISABLED = "DISABLED"
    """


    """
    ADMIN_STATE_GRACEFUL_DISABLED = "GRACEFUL_DISABLED"
    """


    """



    _canonical_to_pep_names = {
                            'admin_state': 'admin_state',
                            'backup_member': 'backup_member',
                            'display_name': 'display_name',
                            'ip_address': 'ip_address',
                            'max_concurrent_connections': 'max_concurrent_connections',
                            'port': 'port',
                            'weight': 'weight',
                            }

    def __init__(self,
                 admin_state=None,
                 backup_member=None,
                 display_name=None,
                 ip_address=None,
                 max_concurrent_connections=None,
                 port=None,
                 weight=None,
                ):
        """
        :type  admin_state: :class:`str` or ``None``
        :param admin_state: Possible values are: 
            
            * :attr:`LBPoolMember.ADMIN_STATE_ENABLED`
            * :attr:`LBPoolMember.ADMIN_STATE_DISABLED`
            * :attr:`LBPoolMember.ADMIN_STATE_GRACEFUL_DISABLED`
            
             Member admin state.
        :type  backup_member: :class:`bool` or ``None``
        :param backup_member: Backup servers are typically configured with a sorry page
            indicating to the user that the application is currently
            unavailable. While the pool is active (a specified minimum number
            of pool members are active) BACKUP members are skipped during
            server selection. When the pool is inactive, incoming connections
            are sent to only the BACKUP member(s).
        :type  display_name: :class:`str` or ``None``
        :param display_name: Pool member name.
        :type  ip_address: :class:`str` or ``None``
        :param ip_address: Pool member IP address. format: ip
        :type  max_concurrent_connections: :class:`long` or ``None``
        :param max_concurrent_connections: To ensure members are not overloaded, connections to a member can
            be capped by the load balancer. When a member reaches this limit,
            it is skipped during server selection. If it is not specified, it
            means that connections are unlimited. format: int64
        :type  port: :class:`str` or ``None``
        :param port: If port is specified, all connections will be sent to this port.
            Only single port is supported. If unset, the same port the client
            connected to will be used, it could be overrode by
            default_pool_member_port setting in virtual server. The port should
            not specified for port range case. format: port-or-range
        :type  weight: :class:`long` or ``None``
        :param weight: Pool member weight is used for WEIGHTED_ROUND_ROBIN balancing
            algorithm. The weight value would be ignored in other algorithms.
            format: int64
        """
        self.admin_state = admin_state
        self.backup_member = backup_member
        self.display_name = display_name
        self.ip_address = ip_address
        self.max_concurrent_connections = max_concurrent_connections
        self.port = port
        self.weight = weight
        VapiStruct.__init__(self)


LBPoolMember._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_pool_member', {
        'admin_state': type.OptionalType(type.StringType()),
        'backup_member': type.OptionalType(type.BooleanType()),
        'display_name': type.OptionalType(type.StringType()),
        'ip_address': type.OptionalType(type.StringType()),
        'max_concurrent_connections': type.OptionalType(type.IntegerType()),
        'port': type.OptionalType(type.StringType()),
        'weight': type.OptionalType(type.IntegerType()),
    },
    LBPoolMember,
    False,
    None))



class LBPoolMemberGroup(VapiStruct):
    """
    Pool member group.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    IP_REVISION_FILTER_IPV4 = "IPV4"
    """


    """
    IP_REVISION_FILTER_IPV6 = "IPV6"
    """


    """
    IP_REVISION_FILTER_IPV4_IPV6 = "IPV4_IPV6"
    """


    """



    _canonical_to_pep_names = {
                            'customized_members': 'customized_members',
                            'group_path': 'group_path',
                            'ip_revision_filter': 'ip_revision_filter',
                            'max_ip_list_size': 'max_ip_list_size',
                            'port': 'port',
                            }

    def __init__(self,
                 customized_members=None,
                 group_path=None,
                 ip_revision_filter=None,
                 max_ip_list_size=None,
                 port=None,
                ):
        """
        :type  customized_members: :class:`list` of :class:`PoolMemberSetting` or ``None``
        :param customized_members: The list is used to show the customized pool member settings. User
            can only user pool member action API to update the admin state for
            a specific IP address.
        :type  group_path: :class:`str` or ``None``
        :param group_path: Load balancer pool support Group as dynamic pool members. The IP
            list of the Group would be used as pool member IP setting.
        :type  ip_revision_filter: :class:`str` or ``None``
        :param ip_revision_filter: Possible values are: 
            
            * :attr:`LBPoolMemberGroup.IP_REVISION_FILTER_IPV4`
            * :attr:`LBPoolMemberGroup.IP_REVISION_FILTER_IPV6`
            * :attr:`LBPoolMemberGroup.IP_REVISION_FILTER_IPV4_IPV6`
            
            Ip revision filter is used to filter IPv4 or IPv6 addresses from
            the grouping object. If the filter is not specified, both IPv4 and
            IPv6 addresses would be used as server IPs. The link local and
            loopback addresses would be always filtered out.
        :type  max_ip_list_size: :class:`long` or ``None``
        :param max_ip_list_size: The size is used to define the maximum number of grouping object IP
            address list. These IP addresses would be used as pool members. If
            the grouping object includes more than certain number of IP
            addresses, the redundant parts would be ignored and those IP
            addresses would not be treated as pool members. If the size is not
            specified, one member is budgeted for this dynamic pool so that the
            pool has at least one member even if some other dynamic pools grow
            beyond the capacity of load balancer service. Other members are
            picked according to available dynamic capacity. The unused members
            would be set to DISABLED so that the load balancer system itself is
            not overloaded during runtime. format: int64
        :type  port: :class:`long` or ``None``
        :param port: If port is specified, all connections will be sent to this port. If
            unset, the same port the client connected to will be used, it could
            be overridden by default_pool_member_ports setting in virtual
            server. The port should not specified for multiple ports case.
            format: int32
        """
        self.customized_members = customized_members
        self.group_path = group_path
        self.ip_revision_filter = ip_revision_filter
        self.max_ip_list_size = max_ip_list_size
        self.port = port
        VapiStruct.__init__(self)


LBPoolMemberGroup._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_pool_member_group', {
        'customized_members': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PoolMemberSetting'))),
        'group_path': type.OptionalType(type.StringType()),
        'ip_revision_filter': type.OptionalType(type.StringType()),
        'max_ip_list_size': type.OptionalType(type.IntegerType()),
        'port': type.OptionalType(type.IntegerType()),
    },
    LBPoolMemberGroup,
    False,
    None))



class LBPoolMemberStatistics(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'ip_address': 'ip_address',
                            'port': 'port',
                            'statistics': 'statistics',
                            }

    def __init__(self,
                 ip_address=None,
                 port=None,
                 statistics=None,
                ):
        """
        :type  ip_address: :class:`str` or ``None``
        :param ip_address: Pool member IP address. format: ip
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  port: :class:`str` or ``None``
        :param port: The port is configured in pool member. For virtual server port
            range case, pool member port must be null. format: port-or-range
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  statistics: :class:`LBStatisticsCounter` or ``None``
        :param statistics: Pool member statistics counter.
        """
        self.ip_address = ip_address
        self.port = port
        self.statistics = statistics
        VapiStruct.__init__(self)


LBPoolMemberStatistics._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_pool_member_statistics', {
        'ip_address': type.OptionalType(type.StringType()),
        'port': type.OptionalType(type.StringType()),
        'statistics': type.OptionalType(type.ReferenceType(__name__, 'LBStatisticsCounter')),
    },
    LBPoolMemberStatistics,
    False,
    None))



class LBPoolMemberStatus(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    STATUS_UP = "UP"
    """


    """
    STATUS_DOWN = "DOWN"
    """


    """
    STATUS_DISABLED = "DISABLED"
    """


    """
    STATUS_GRACEFUL_DISABLED = "GRACEFUL_DISABLED"
    """


    """
    STATUS_UNUSED = "UNUSED"
    """


    """
    STATUS_UNKNOWN = "UNKNOWN"
    """


    """



    _canonical_to_pep_names = {
                            'failure_cause': 'failure_cause',
                            'ip_address': 'ip_address',
                            'last_check_time': 'last_check_time',
                            'last_state_change_time': 'last_state_change_time',
                            'port': 'port',
                            'status': 'status',
                            }

    def __init__(self,
                 failure_cause=None,
                 ip_address=None,
                 last_check_time=None,
                 last_state_change_time=None,
                 port=None,
                 status=None,
                ):
        """
        :type  failure_cause: :class:`str` or ``None``
        :param failure_cause: If multiple active monitors are configured, the failure_cause
            contains failure cause for each monitors. Like
            \"Monitor_1:failure_cause_1. Monitor_2:failure_cause_2.\"
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  ip_address: :class:`str` or ``None``
        :param ip_address: Pool member IP address. format: ip
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_check_time: :class:`long` or ``None``
        :param last_check_time: If multiple active monitors are configured, the property value is
            the latest last_check_time among all the monitors. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_state_change_time: :class:`long` or ``None``
        :param last_state_change_time: If multiple active monitors are configured, the property value is
            the latest last_state_change_time among all the monitors. format:
            int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  port: :class:`str` or ``None``
        :param port: The port is configured in pool member. For virtual server port
            range case, pool member port must be null. format: port-or-range
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  status: :class:`str` or ``None``
        :param status: Possible values are: 
            
            * :attr:`LBPoolMemberStatus.STATUS_UP`
            * :attr:`LBPoolMemberStatus.STATUS_DOWN`
            * :attr:`LBPoolMemberStatus.STATUS_DISABLED`
            * :attr:`LBPoolMemberStatus.STATUS_GRACEFUL_DISABLED`
            * :attr:`LBPoolMemberStatus.STATUS_UNUSED`
            * :attr:`LBPoolMemberStatus.STATUS_UNKNOWN`
            
            UP means that pool member is enabled and monitors have marked the
            pool member as UP. If the pool member has no monitor configured, it
            would be treated as UP. DOWN means that pool member is enabled and
            monitors have marked the pool member as DOWN. DISABLED means that
            admin state of pool member is set to DISABLED. GRACEFUL_DISABLED
            means that admin state of pool member is set to GRACEFUL_DISABLED.
            UNUSED means that the pool member is not used when the IP list size
            of member group exceeds the maximum setting. The remaining IP
            addresses would not be used as available backend servers, hence
            mark the status as UNUSED. UNKNOWN means that the related pool is
            not associated to any enabled virtual servers, or no status
            reported from transport-nodes, the associated load balancer service
            may be working(or not working).
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.failure_cause = failure_cause
        self.ip_address = ip_address
        self.last_check_time = last_check_time
        self.last_state_change_time = last_state_change_time
        self.port = port
        self.status = status
        VapiStruct.__init__(self)


LBPoolMemberStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_pool_member_status', {
        'failure_cause': type.OptionalType(type.StringType()),
        'ip_address': type.OptionalType(type.StringType()),
        'last_check_time': type.OptionalType(type.IntegerType()),
        'last_state_change_time': type.OptionalType(type.IntegerType()),
        'port': type.OptionalType(type.StringType()),
        'status': type.OptionalType(type.StringType()),
    },
    LBPoolMemberStatus,
    False,
    None))



class LBPoolStatistics(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'last_update_timestamp': 'last_update_timestamp',
                            'members': 'members',
                            'pool_path': 'pool_path',
                            'statistics': 'statistics',
                            'alarm': 'alarm',
                            'enforcement_point_path': 'enforcement_point_path',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 last_update_timestamp=None,
                 members=None,
                 pool_path=None,
                 statistics=None,
                 alarm=None,
                 enforcement_point_path=None,
                 resource_type=None,
                ):
        """
        :type  last_update_timestamp: :class:`long` or ``None``
        :param last_update_timestamp: Timestamp when the data was last updated. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  members: :class:`list` of :class:`LBPoolMemberStatistics` or ``None``
        :param members: Statistics of load balancer pool members.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  pool_path: :class:`str` or ``None``
        :param pool_path: Load balancer pool object path.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  statistics: :class:`LBStatisticsCounter` or ``None``
        :param statistics: Virtual server statistics counter.
        :type  alarm: :class:`PolicyRuntimeAlarm` or ``None``
        :param alarm: Alarm information details.
        :type  enforcement_point_path: :class:`str` or ``None``
        :param enforcement_point_path: Policy Path referencing the enforcement point where the info is
            fetched.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  resource_type: :class:`str`
        :param resource_type: 
        """
        self.last_update_timestamp = last_update_timestamp
        self.members = members
        self.pool_path = pool_path
        self.statistics = statistics
        self.alarm = alarm
        self.enforcement_point_path = enforcement_point_path
        self._resource_type = resource_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

LBPoolStatistics._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_pool_statistics', {
        'last_update_timestamp': type.OptionalType(type.IntegerType()),
        'members': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'LBPoolMemberStatistics'))),
        'pool_path': type.OptionalType(type.StringType()),
        'statistics': type.OptionalType(type.ReferenceType(__name__, 'LBStatisticsCounter')),
        'alarm': type.OptionalType(type.ReferenceType(__name__, 'PolicyRuntimeAlarm')),
        'enforcement_point_path': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
    },
    LBPoolStatistics,
    False,
    None))



class LBPoolStatisticsPerEP(VapiStruct):
    """
    LBPoolStatistics on specific Enforcement Point

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "LBPoolStatisticsPerEP"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'alarm': 'alarm',
                            'enforcement_point_path': 'enforcement_point_path',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 alarm=None,
                 enforcement_point_path=None,
                 resource_type='LBPoolStatisticsPerEP',
                ):
        """
        :type  alarm: :class:`PolicyRuntimeAlarm` or ``None``
        :param alarm: Alarm information details.
        :type  enforcement_point_path: :class:`str` or ``None``
        :param enforcement_point_path: Policy Path referencing the enforcement point where the info is
            fetched.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  resource_type: :class:`str`
        :param resource_type: 
        """
        self.alarm = alarm
        self.enforcement_point_path = enforcement_point_path
        self._resource_type = resource_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

LBPoolStatisticsPerEP._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_pool_statistics_per_EP', {
        'alarm': type.OptionalType(type.ReferenceType(__name__, 'PolicyRuntimeAlarm')),
        'enforcement_point_path': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
    },
    LBPoolStatisticsPerEP,
    False,
    None))



class LBPoolStatus(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "LBPoolStatus"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    STATUS_UP = "UP"
    """


    """
    STATUS_PARTIALLY_UP = "PARTIALLY_UP"
    """


    """
    STATUS_PRIMARY_DOWN = "PRIMARY_DOWN"
    """


    """
    STATUS_DOWN = "DOWN"
    """


    """
    STATUS_DETACHED = "DETACHED"
    """


    """
    STATUS_UNKNOWN = "UNKNOWN"
    """


    """



    _canonical_to_pep_names = {
                            'last_update_timestamp': 'last_update_timestamp',
                            'members': 'members',
                            'pool_path': 'pool_path',
                            'status': 'status',
                            'alarm': 'alarm',
                            'enforcement_point_path': 'enforcement_point_path',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 last_update_timestamp=None,
                 members=None,
                 pool_path=None,
                 status=None,
                 alarm=None,
                 enforcement_point_path=None,
                 resource_type='LBPoolStatus',
                ):
        """
        :type  last_update_timestamp: :class:`long` or ``None``
        :param last_update_timestamp: Timestamp when the data was last updated. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  members: :class:`list` of :class:`LBPoolMemberStatus` or ``None``
        :param members: Status of load balancer pool members.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  pool_path: :class:`str` or ``None``
        :param pool_path: Load balancer pool object path.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  status: :class:`str` or ``None``
        :param status: Possible values are: 
            
            * :attr:`LBPoolStatus.STATUS_UP`
            * :attr:`LBPoolStatus.STATUS_PARTIALLY_UP`
            * :attr:`LBPoolStatus.STATUS_PRIMARY_DOWN`
            * :attr:`LBPoolStatus.STATUS_DOWN`
            * :attr:`LBPoolStatus.STATUS_DETACHED`
            * :attr:`LBPoolStatus.STATUS_UNKNOWN`
            
            UP means that all primary members are in UP status. PARTIALLY_UP
            means that some(not all) primary members are in UP status, the
            number of these active members is larger or equal to certain
            number(min_active_members) which is defined in LBPool. When there
            are no backup members which are in the UP status, the
            number(min_active_members) would be ignored. PRIMARY_DOWN means
            that less than certain(min_active_members) primary members are in
            UP status but backup members are in UP status, connections to this
            pool would be dispatched to backup members. DOWN means that all
            primary and backup members are DOWN. DETACHED means that the pool
            is not bound to any virtual server. UNKOWN means that no status
            reported from transport-nodes. The associated load balancer service
            may be working(or not working).
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  alarm: :class:`PolicyRuntimeAlarm` or ``None``
        :param alarm: Alarm information details.
        :type  enforcement_point_path: :class:`str` or ``None``
        :param enforcement_point_path: Policy Path referencing the enforcement point where the info is
            fetched.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  resource_type: :class:`str`
        :param resource_type: 
        """
        self.last_update_timestamp = last_update_timestamp
        self.members = members
        self.pool_path = pool_path
        self.status = status
        self.alarm = alarm
        self.enforcement_point_path = enforcement_point_path
        self._resource_type = resource_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

LBPoolStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_pool_status', {
        'last_update_timestamp': type.OptionalType(type.IntegerType()),
        'members': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'LBPoolMemberStatus'))),
        'pool_path': type.OptionalType(type.StringType()),
        'status': type.OptionalType(type.StringType()),
        'alarm': type.OptionalType(type.ReferenceType(__name__, 'PolicyRuntimeAlarm')),
        'enforcement_point_path': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
    },
    LBPoolStatus,
    False,
    None))



class LBPoolStatusPerEP(VapiStruct):
    """
    LBPoolStatus on specific Enforcement Point

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "LBPoolStatusPerEP"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'alarm': 'alarm',
                            'enforcement_point_path': 'enforcement_point_path',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 alarm=None,
                 enforcement_point_path=None,
                 resource_type='LBPoolStatusPerEP',
                ):
        """
        :type  alarm: :class:`PolicyRuntimeAlarm` or ``None``
        :param alarm: Alarm information details.
        :type  enforcement_point_path: :class:`str` or ``None``
        :param enforcement_point_path: Policy Path referencing the enforcement point where the info is
            fetched.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  resource_type: :class:`str`
        :param resource_type: 
        """
        self.alarm = alarm
        self.enforcement_point_path = enforcement_point_path
        self._resource_type = resource_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

LBPoolStatusPerEP._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_pool_status_per_EP', {
        'alarm': type.OptionalType(type.ReferenceType(__name__, 'PolicyRuntimeAlarm')),
        'enforcement_point_path': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
    },
    LBPoolStatusPerEP,
    False,
    None))



class LBRule(VapiStruct):
    """
    Binding of a LBPool and Group to a LBVirtualServer used to route
    application traffic passing through load balancers. LBRule uses match
    conditions to match application traffic passing through a LBVirtualServer
    using HTTP or HTTPS. Can bind multiple LBVirtualServers to a Group. Each
    LBRule consists of two optional match conditions, each match contidion
    defines a criterion for application traffic. If no match conditions are
    specified, then the LBRule will always match and it is used typically to
    define default rules. If more than one match condition is specified, then
    matching strategy determines if all conditions should match or any one
    condition should match for the LBRule to be considered a match. A match
    indicates that the LBVirtualServer should route the request to the Group
    (parent of LBRule).

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    MATCH_STRATEGY_ALL = "ALL"
    """


    """
    MATCH_STRATEGY_ANY = "ANY"
    """


    """
    PHASE_HTTP_REQUEST_REWRITE = "HTTP_REQUEST_REWRITE"
    """


    """
    PHASE_HTTP_FORWARDING = "HTTP_FORWARDING"
    """


    """
    PHASE_HTTP_RESPONSE_REWRITE = "HTTP_RESPONSE_REWRITE"
    """


    """
    PHASE_HTTP_ACCESS = "HTTP_ACCESS"
    """


    """
    PHASE_TRANSPORT = "TRANSPORT"
    """


    """



    _canonical_to_pep_names = {
                            'actions': 'actions',
                            'display_name': 'display_name',
                            'match_conditions': 'match_conditions',
                            'match_strategy': 'match_strategy',
                            'phase': 'phase',
                            }

    def __init__(self,
                 actions=None,
                 display_name=None,
                 match_conditions=None,
                 match_strategy=None,
                 phase=None,
                ):
        """
        :type  actions: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param actions: A list of actions to be executed at specified phase when load
            balancer rule matches. The actions are used to manipulate
            application traffic, such as rewrite URI of HTTP messages, redirect
            HTTP messages, etc.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`LBRuleAction`. When methods return a value of this class as
            a return value, the attribute will contain all the attributes
            defined in :class:`LBRuleAction`.
        :type  display_name: :class:`str` or ``None``
        :param display_name: A display name useful for identifying an LBRule.
        :type  match_conditions: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param match_conditions: A list of match conditions used to match application traffic.
            Multiple match conditions can be specified in one load balancer
            rule, each match condition defines a criterion to match application
            traffic. If no match conditions are specified, then the load
            balancer rule will always match and it is used typically to define
            default rules. If more than one match condition is specified, then
            match strategy determines if all conditions should match or any one
            condition should match for the load balancer rule to considered a
            match.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`LBRuleCondition`. When methods return a value of this class
            as a return value, the attribute will contain all the attributes
            defined in :class:`LBRuleCondition`.
        :type  match_strategy: :class:`str` or ``None``
        :param match_strategy: Possible values are: 
            
            * :attr:`LBRule.MATCH_STRATEGY_ALL`
            * :attr:`LBRule.MATCH_STRATEGY_ANY`
            
            If more than one match condition is specified, then matching
            strategy determines if all conditions should match or any one
            condition should match for the LB Rule to be considered a match. -
            ALL indicates that both host_match and path_match must match for
            this LBRule to be considered a match. - ANY indicates that either
            host_match or patch match may match for this LBRule to be
            considered a match.
        :type  phase: :class:`str` or ``None``
        :param phase: Possible values are: 
            
            * :attr:`LBRule.PHASE_HTTP_REQUEST_REWRITE`
            * :attr:`LBRule.PHASE_HTTP_FORWARDING`
            * :attr:`LBRule.PHASE_HTTP_RESPONSE_REWRITE`
            * :attr:`LBRule.PHASE_HTTP_ACCESS`
            * :attr:`LBRule.PHASE_TRANSPORT`
            
            Each load balancer rule is used at a specific phase of load
            balancer processing. Currently five phases are supported,
            HTTP_REQUEST_REWRITE, HTTP_FORWARDING, HTTP_RESPONSE_REWRITE,
            HTTP_ACCESS and TRANSPORT. When an HTTP request message is received
            by load balancer, all HTTP_REQUEST_REWRITE rules, if present are
            executed in the order they are applied to virtual server. And then
            if HTTP_FORWARDING rules present, only first matching rule's action
            is executed, remaining rules are not checked. HTTP_FORWARDING rules
            can have only one action. If the request is forwarded to a backend
            server and the response goes back to load balancer, all
            HTTP_RESPONSE_REWRITE rules, if present, are executed in the order
            they are applied to the virtual server. In HTTP_ACCESS phase, user
            can define action to control access using JWT authentication. In
            TRANSPORT phase, user can define the condition to match SNI in TLS
            client hello and define the action to do SSL end-to-end, SSL
            offloading or SSL passthrough using a specific load balancer server
            pool.
        """
        self.actions = actions
        self.display_name = display_name
        self.match_conditions = match_conditions
        self.match_strategy = match_strategy
        self.phase = phase
        VapiStruct.__init__(self)


LBRule._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_rule', {
        'actions': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'LBRuleAction')]))),
        'display_name': type.OptionalType(type.StringType()),
        'match_conditions': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'LBRuleCondition')]))),
        'match_strategy': type.OptionalType(type.StringType()),
        'phase': type.OptionalType(type.StringType()),
    },
    LBRule,
    False,
    None))



class LBRuleAction(VapiStruct):
    """
    Load balancer rule actions are used to manipulate application traffic.
    Currently load balancer rules can be used at three load balancer processing
    phases. Each phase has its own supported type of actions. Supported actions
    in HTTP_REQUST_REWRITE phase are: LBHttpRequestUriRewriteAction
    LBHttpRequestHeaderRewriteAction LBHttpRequestHeaderDeleteAction
    LBVariableAssignmentAction Supported actions in HTTP_FORWARDING phase are:
    LBHttpRejectAction LBHttpRedirectAction LBSelectPoolAction
    LBVariablePersistenceOnAction LBConnectionDropAction Supported action in
    HTTP_RESPONSE_REWRITE phase is: LBHttpResponseHeaderRewriteAction
    LBHttpResponseHeaderDeleteAction LBVariablePersistenceLearnAction Supported
    action in HTTP_ACCESS phase is: LBJwtAuthAction LBConnectionDropAction
    LBVariableAssignmentAction Supported action in TRANSPORT phase is:
    LBSslModeSelectionAction LBSelectPoolAction If the match type of an
    LBRuleCondition field is specified as REGEX and named capturing groups are
    used in the specified regular expression. The groups can be used as
    variables in LBRuleAction fields. For example, define a rule with
    LBHttpRequestUriCondition as match condition and
    LBHttpRequestUriRewriteAction as action. Set match_type field of
    LBHttpRequestUriCondition to REGEX, and set uri field to
    \"/news/(?&lt;year&gt;\\d+)/(?&lt;month&gt;\\d+)/(?&lt;article&gt;.\*)\".
    Set uri field of LBHttpRequestUriRewriteAction to:
    \"/news/$year-$month/$article\" In uri field of LBHttpRequestUriCondition,
    the (?&lt;year&gt;\\d+), (?&lt;month&gt;\\d+) and (?&lt;article&gt;.\*) are
    named capturing groups, they define variables named $year, $month and
    $article respectively. The defined variables are used in
    LBHttpRequestUriRewriteAction. For a matched HTTP request with URI
    \"/news/2017/06/xyz.html\", the substring \"2017\" is captured in variable
    $year, \"06\" is captured in variable $month, and \"xyz.html\" is captured
    in variable $article. The LBHttpRequestUriRewriteAction will rewrite the
    URI to: \"/news/2017-06/xyz.html\" A set of built-in variables can be used
    in LBRuleAction as well. The name of built-in variables start with
    underscore, the name of user defined variables is not allowed to start with
    underscore. Following are some of the built-in variables: $_scheme:
    Reference the scheme part of matched HTTP messages, could be \"http\" or
    \"https\". $_host: Host of matched HTTP messages, for example
    \"www.example.com\". $_server_port: Port part of URI, it is also the port
    of the server which accepted a request. Default port is 80 for http and 443
    for https. $_uri: The URI path, for example \"/products/sample.html\".
    $_request_uri: Full original request URI with arguments, for example,
    \"/products/sample.html?a=b&c=d\". $_args: URI arguments, for instance
    \"a=b&c=d\" $_is_args: \"?\" if a request has URI arguments, or an empty
    string otherwise. For the full list of built-in variables, please reference
    the NSX-T Administrator's Guide.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "LBRuleAction"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    TYPE_LBSELECTPOOLACTION = "LBSelectPoolAction"
    """


    """
    TYPE_LBHTTPREQUESTURIREWRITEACTION = "LBHttpRequestUriRewriteAction"
    """


    """
    TYPE_LBHTTPREQUESTHEADERREWRITEACTION = "LBHttpRequestHeaderRewriteAction"
    """


    """
    TYPE_LBHTTPREJECTACTION = "LBHttpRejectAction"
    """


    """
    TYPE_LBHTTPREDIRECTACTION = "LBHttpRedirectAction"
    """


    """
    TYPE_LBHTTPRESPONSEHEADERREWRITEACTION = "LBHttpResponseHeaderRewriteAction"
    """


    """
    TYPE_LBHTTPREQUESTHEADERDELETEACTION = "LBHttpRequestHeaderDeleteAction"
    """


    """
    TYPE_LBHTTPRESPONSEHEADERDELETEACTION = "LBHttpResponseHeaderDeleteAction"
    """


    """
    TYPE_LBVARIABLEASSIGNMENTACTION = "LBVariableAssignmentAction"
    """


    """
    TYPE_LBVARIABLEPERSISTENCEONACTION = "LBVariablePersistenceOnAction"
    """


    """
    TYPE_LBVARIABLEPERSISTENCELEARNACTION = "LBVariablePersistenceLearnAction"
    """


    """
    TYPE_LBJWTAUTHACTION = "LBJwtAuthAction"
    """


    """
    TYPE_LBSSLMODESELECTIONACTION = "LBSslModeSelectionAction"
    """


    """
    TYPE_LBCONNECTIONDROPACTION = "LBConnectionDropAction"
    """


    """



    _canonical_to_pep_names = {
                            'type': 'type',
                            }

    def __init__(self,
                 type='LBRuleAction',
                ):
        """
        :type  type: :class:`str`
        :param type: Possible values are: 
            
            * :attr:`LBRuleAction.TYPE_LBSELECTPOOLACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPREQUESTURIREWRITEACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPREQUESTHEADERREWRITEACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPREJECTACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPREDIRECTACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPRESPONSEHEADERREWRITEACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPREQUESTHEADERDELETEACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPRESPONSEHEADERDELETEACTION`
            * :attr:`LBRuleAction.TYPE_LBVARIABLEASSIGNMENTACTION`
            * :attr:`LBRuleAction.TYPE_LBVARIABLEPERSISTENCEONACTION`
            * :attr:`LBRuleAction.TYPE_LBVARIABLEPERSISTENCELEARNACTION`
            * :attr:`LBRuleAction.TYPE_LBJWTAUTHACTION`
            * :attr:`LBRuleAction.TYPE_LBSSLMODESELECTIONACTION`
            * :attr:`LBRuleAction.TYPE_LBCONNECTIONDROPACTION`
            
             The property identifies the load balancer rule action type.
        """
        self._type = type
        VapiStruct.__init__(self)

    @property
    def type(self):
        """
        Return the discriminator value
        """
        return self._type

LBRuleAction._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_rule_action', {
        'type': type.StringType(),
    },
    LBRuleAction,
    False,
    None))



class LBRuleCondition(VapiStruct):
    """
    Match conditions are used to match application traffic passing through load
    balancers. Multiple match conditions can be specified in one load balancer
    rule, each match condition defines a criterion for application traffic. If
    inverse field is set to true, the match result of the condition is
    inverted. If more than one match condition is specified, match strategy
    determines if all conditions should match or any one condition should match
    for the load balancer rule to be considered a match. Currently only HTTP
    messages are supported by load balancer rules. Each load balancer rule is
    used at a specific phase of load balancer processing. Currently three
    phases are supported, HTTP_REQUEST_REWRITE, HTTP_FORWARDING and
    HTTP_RESPONSE_REWRITE. Each phase supports certain types of match
    conditions, supported match conditions in HTTP_REQUEST_REWRITE phase are:
    LBHttpRequestMethodCondition LBHttpRequestUriCondition
    LBHttpRequestUriArgumentsCondition LBHttpRequestVersionCondition
    LBHttpRequestHeaderCondition LBHttpRequestCookieCondition
    LBHttpRequestBodyCondition LBTcpHeaderCondition LBIpHeaderCondition
    LBVariableCondition LBHttpSslCondition Supported match conditions in
    HTTP_FORWARDING phase are: LBHttpRequestMethodCondition
    LBHttpRequestUriCondition LBHttpRequestUriArgumentsCondition
    LBHttpRequestVersionCondition LBHttpRequestHeaderCondition
    LBHttpRequestCookieCondition LBHttpRequestBodyCondition
    LBTcpHeaderCondition LBIpHeaderCondition LBVariableCondition
    LBHttpSslCondition LBSslSniCondition Supported match conditions in
    HTTP_RESPONSE_REWRITE phase are: LBHttpResponseHeaderCondition
    LBHttpRequestMethodCondition LBHttpRequestUriCondition
    LBHttpRequestUriArgumentsCondition LBHttpRequestVersionCondition
    LBHttpRequestHeaderCondition LBHttpRequestCookieCondition
    LBTcpHeaderCondition LBIpHeaderCondition LBVariableCondition
    LBHttpSslCondition Supported match condition in HTTP_ACCESS phase is:
    LBHttpRequestMethodCondition LBHttpRequestUriCondition
    LBHttpRequestUriArgumentsCondition LBHttpRequestVersionCondition
    LBHttpRequestHeaderCondition LBHttpRequestCookieCondition
    LBHttpRequestBodyCondition LBTcpHeaderCondition LBIpHeaderCondition
    LBVariableCondition LBHttpSslCondition Supported match condition in
    TRANSPORT phase is: LBSslSniCondition

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "LBRuleCondition"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    TYPE_LBHTTPREQUESTURICONDITION = "LBHttpRequestUriCondition"
    """


    """
    TYPE_LBHTTPREQUESTHEADERCONDITION = "LBHttpRequestHeaderCondition"
    """


    """
    TYPE_LBHTTPREQUESTMETHODCONDITION = "LBHttpRequestMethodCondition"
    """


    """
    TYPE_LBHTTPREQUESTURIARGUMENTSCONDITION = "LBHttpRequestUriArgumentsCondition"
    """


    """
    TYPE_LBHTTPREQUESTVERSIONCONDITION = "LBHttpRequestVersionCondition"
    """


    """
    TYPE_LBHTTPREQUESTCOOKIECONDITION = "LBHttpRequestCookieCondition"
    """


    """
    TYPE_LBHTTPREQUESTBODYCONDITION = "LBHttpRequestBodyCondition"
    """


    """
    TYPE_LBHTTPRESPONSEHEADERCONDITION = "LBHttpResponseHeaderCondition"
    """


    """
    TYPE_LBTCPHEADERCONDITION = "LBTcpHeaderCondition"
    """


    """
    TYPE_LBIPHEADERCONDITION = "LBIpHeaderCondition"
    """


    """
    TYPE_LBVARIABLECONDITION = "LBVariableCondition"
    """


    """
    TYPE_LBHTTPSSLCONDITION = "LBHttpSslCondition"
    """


    """
    TYPE_LBSSLSNICONDITION = "LBSslSniCondition"
    """


    """



    _canonical_to_pep_names = {
                            'inverse': 'inverse',
                            'type': 'type',
                            }

    def __init__(self,
                 inverse=None,
                 type='LBRuleCondition',
                ):
        """
        :type  inverse: :class:`bool` or ``None``
        :param inverse: A flag to indicate whether reverse the match result of this
            condition
        :type  type: :class:`str`
        :param type: Possible values are: 
            
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTURICONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTHEADERCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTMETHODCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTURIARGUMENTSCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTVERSIONCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTCOOKIECONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTBODYCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPRESPONSEHEADERCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBTCPHEADERCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBIPHEADERCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBVARIABLECONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPSSLCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBSSLSNICONDITION`
            
             Type of load balancer rule condition
        """
        self.inverse = inverse
        self._type = type
        VapiStruct.__init__(self)

    @property
    def type(self):
        """
        Return the discriminator value
        """
        return self._type

LBRuleCondition._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_rule_condition', {
        'inverse': type.OptionalType(type.BooleanType()),
        'type': type.StringType(),
    },
    LBRuleCondition,
    False,
    None))



class LBSelectPoolAction(VapiStruct):
    """
    This action is used to select a pool for matched HTTP request messages. The
    pool is specified by path. The matched HTTP request messages are forwarded
    to the specified pool.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "LBSelectPoolAction"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'pool_id': 'pool_id',
                            'type': 'type',
                            }

    def __init__(self,
                 pool_id=None,
                 type='LBSelectPoolAction',
                ):
        """
        :type  pool_id: :class:`str` or ``None``
        :param pool_id: Path of load balancer pool.
        :type  type: :class:`str`
        :param type: Possible values are: 
            
            * :attr:`LBRuleAction.TYPE_LBSELECTPOOLACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPREQUESTURIREWRITEACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPREQUESTHEADERREWRITEACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPREJECTACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPREDIRECTACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPRESPONSEHEADERREWRITEACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPREQUESTHEADERDELETEACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPRESPONSEHEADERDELETEACTION`
            * :attr:`LBRuleAction.TYPE_LBVARIABLEASSIGNMENTACTION`
            * :attr:`LBRuleAction.TYPE_LBVARIABLEPERSISTENCEONACTION`
            * :attr:`LBRuleAction.TYPE_LBVARIABLEPERSISTENCELEARNACTION`
            * :attr:`LBRuleAction.TYPE_LBJWTAUTHACTION`
            * :attr:`LBRuleAction.TYPE_LBSSLMODESELECTIONACTION`
            * :attr:`LBRuleAction.TYPE_LBCONNECTIONDROPACTION`
            
             The property identifies the load balancer rule action type.
        """
        self.pool_id = pool_id
        self._type = type
        VapiStruct.__init__(self)

    @property
    def type(self):
        """
        Return the discriminator value
        """
        return self._type

LBSelectPoolAction._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_select_pool_action', {
        'pool_id': type.OptionalType(type.StringType()),
        'type': type.StringType(),
    },
    LBSelectPoolAction,
    False,
    None))



class LBServerSslProfile(VapiStruct):
    """
    Server SSL profile.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    CIPHER_GROUP_LABEL_BALANCED = "BALANCED"
    """


    """
    CIPHER_GROUP_LABEL_HIGH_SECURITY = "HIGH_SECURITY"
    """


    """
    CIPHER_GROUP_LABEL_HIGH_COMPATIBILITY = "HIGH_COMPATIBILITY"
    """


    """
    CIPHER_GROUP_LABEL_CUSTOM = "CUSTOM"
    """


    """
    CIPHERS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 = "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"
    """


    """
    CIPHERS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 = "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384"
    """


    """
    CIPHERS_ECDHE_RSA_WITH_AES_256_CBC_SHA = "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA"
    """


    """
    CIPHERS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA = "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA"
    """


    """
    CIPHERS_ECDH_ECDSA_WITH_AES_256_CBC_SHA = "TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA"
    """


    """
    CIPHERS_ECDH_RSA_WITH_AES_256_CBC_SHA = "TLS_ECDH_RSA_WITH_AES_256_CBC_SHA"
    """


    """
    CIPHERS_RSA_WITH_AES_256_CBC_SHA = "TLS_RSA_WITH_AES_256_CBC_SHA"
    """


    """
    CIPHERS_RSA_WITH_AES_128_CBC_SHA = "TLS_RSA_WITH_AES_128_CBC_SHA"
    """


    """
    CIPHERS_RSA_WITH_3DES_EDE_CBC_SHA = "TLS_RSA_WITH_3DES_EDE_CBC_SHA"
    """


    """
    CIPHERS_ECDHE_RSA_WITH_AES_128_CBC_SHA = "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA"
    """


    """
    CIPHERS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 = "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256"
    """


    """
    CIPHERS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 = "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384"
    """


    """
    CIPHERS_RSA_WITH_AES_128_CBC_SHA256 = "TLS_RSA_WITH_AES_128_CBC_SHA256"
    """


    """
    CIPHERS_RSA_WITH_AES_128_GCM_SHA256 = "TLS_RSA_WITH_AES_128_GCM_SHA256"
    """


    """
    CIPHERS_RSA_WITH_AES_256_CBC_SHA256 = "TLS_RSA_WITH_AES_256_CBC_SHA256"
    """


    """
    CIPHERS_RSA_WITH_AES_256_GCM_SHA384 = "TLS_RSA_WITH_AES_256_GCM_SHA384"
    """


    """
    CIPHERS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA = "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA"
    """


    """
    CIPHERS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 = "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256"
    """


    """
    CIPHERS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 = "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256"
    """


    """
    CIPHERS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 = "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384"
    """


    """
    CIPHERS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 = "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384"
    """


    """
    CIPHERS_ECDH_ECDSA_WITH_AES_128_CBC_SHA = "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA"
    """


    """
    CIPHERS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256 = "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256"
    """


    """
    CIPHERS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 = "TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256"
    """


    """
    CIPHERS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384 = "TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384"
    """


    """
    CIPHERS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 = "TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384"
    """


    """
    CIPHERS_ECDH_RSA_WITH_AES_128_CBC_SHA = "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA"
    """


    """
    CIPHERS_ECDH_RSA_WITH_AES_128_CBC_SHA256 = "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256"
    """


    """
    CIPHERS_ECDH_RSA_WITH_AES_128_GCM_SHA256 = "TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256"
    """


    """
    CIPHERS_ECDH_RSA_WITH_AES_256_CBC_SHA384 = "TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384"
    """


    """
    CIPHERS_ECDH_RSA_WITH_AES_256_GCM_SHA384 = "TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384"
    """


    """
    PROTOCOLS_SSL_V2 = "SSL_V2"
    """


    """
    PROTOCOLS_SSL_V3 = "SSL_V3"
    """


    """
    PROTOCOLS_TLS_V1 = "TLS_V1"
    """


    """
    PROTOCOLS_TLS_V1_1 = "TLS_V1_1"
    """


    """
    PROTOCOLS_TLS_V1_2 = "TLS_V1_2"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'cipher_group_label': 'cipher_group_label',
                            'ciphers': 'ciphers',
                            'is_fips': 'is_fips',
                            'is_secure': 'is_secure',
                            'protocols': 'protocols',
                            'session_cache_enabled': 'session_cache_enabled',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 cipher_group_label=None,
                 ciphers=None,
                 is_fips=None,
                 is_secure=None,
                 protocols=None,
                 session_cache_enabled=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  cipher_group_label: :class:`str` or ``None``
        :param cipher_group_label: Possible values are: 
            
            * :attr:`LBServerSslProfile.CIPHER_GROUP_LABEL_BALANCED`
            * :attr:`LBServerSslProfile.CIPHER_GROUP_LABEL_HIGH_SECURITY`
            * :attr:`LBServerSslProfile.CIPHER_GROUP_LABEL_HIGH_COMPATIBILITY`
            * :attr:`LBServerSslProfile.CIPHER_GROUP_LABEL_CUSTOM`
            
             It is a label of cipher group which is mostly consumed by GUI.
        :type  ciphers: :class:`list` of :class:`str` or ``None``
        :param ciphers: Possible values are: 
            
            *
              :attr:`LBServerSslProfile.CIPHERS_ECDHE_RSA_WITH_AES_128_GCM_SHA256`
            *
              :attr:`LBServerSslProfile.CIPHERS_ECDHE_RSA_WITH_AES_256_GCM_SHA384`
            * :attr:`LBServerSslProfile.CIPHERS_ECDHE_RSA_WITH_AES_256_CBC_SHA`
            *
              :attr:`LBServerSslProfile.CIPHERS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA`
            *
              :attr:`LBServerSslProfile.CIPHERS_ECDH_ECDSA_WITH_AES_256_CBC_SHA`
            * :attr:`LBServerSslProfile.CIPHERS_ECDH_RSA_WITH_AES_256_CBC_SHA`
            * :attr:`LBServerSslProfile.CIPHERS_RSA_WITH_AES_256_CBC_SHA`
            * :attr:`LBServerSslProfile.CIPHERS_RSA_WITH_AES_128_CBC_SHA`
            * :attr:`LBServerSslProfile.CIPHERS_RSA_WITH_3DES_EDE_CBC_SHA`
            * :attr:`LBServerSslProfile.CIPHERS_ECDHE_RSA_WITH_AES_128_CBC_SHA`
            *
              :attr:`LBServerSslProfile.CIPHERS_ECDHE_RSA_WITH_AES_128_CBC_SHA256`
            *
              :attr:`LBServerSslProfile.CIPHERS_ECDHE_RSA_WITH_AES_256_CBC_SHA384`
            * :attr:`LBServerSslProfile.CIPHERS_RSA_WITH_AES_128_CBC_SHA256`
            * :attr:`LBServerSslProfile.CIPHERS_RSA_WITH_AES_128_GCM_SHA256`
            * :attr:`LBServerSslProfile.CIPHERS_RSA_WITH_AES_256_CBC_SHA256`
            * :attr:`LBServerSslProfile.CIPHERS_RSA_WITH_AES_256_GCM_SHA384`
            *
              :attr:`LBServerSslProfile.CIPHERS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA`
            *
              :attr:`LBServerSslProfile.CIPHERS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256`
            *
              :attr:`LBServerSslProfile.CIPHERS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256`
            *
              :attr:`LBServerSslProfile.CIPHERS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384`
            *
              :attr:`LBServerSslProfile.CIPHERS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384`
            *
              :attr:`LBServerSslProfile.CIPHERS_ECDH_ECDSA_WITH_AES_128_CBC_SHA`
            *
              :attr:`LBServerSslProfile.CIPHERS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256`
            *
              :attr:`LBServerSslProfile.CIPHERS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256`
            *
              :attr:`LBServerSslProfile.CIPHERS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384`
            *
              :attr:`LBServerSslProfile.CIPHERS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384`
            * :attr:`LBServerSslProfile.CIPHERS_ECDH_RSA_WITH_AES_128_CBC_SHA`
            *
              :attr:`LBServerSslProfile.CIPHERS_ECDH_RSA_WITH_AES_128_CBC_SHA256`
            *
              :attr:`LBServerSslProfile.CIPHERS_ECDH_RSA_WITH_AES_128_GCM_SHA256`
            *
              :attr:`LBServerSslProfile.CIPHERS_ECDH_RSA_WITH_AES_256_CBC_SHA384`
            *
              :attr:`LBServerSslProfile.CIPHERS_ECDH_RSA_WITH_AES_256_GCM_SHA384`
            
             Supported SSL cipher list to client side.
        :type  is_fips: :class:`bool` or ``None``
        :param is_fips: This flag is set to true when all the ciphers and protocols are
            FIPS compliant. It is set to false when one of the ciphers or
            protocols are not FIPS compliant.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  is_secure: :class:`bool` or ``None``
        :param is_secure: This flag is set to true when all the ciphers and protocols are
            secure. It is set to false when one of the ciphers or protocols is
            insecure.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protocols: :class:`list` of :class:`str` or ``None``
        :param protocols: Possible values are: 
            
            * :attr:`LBServerSslProfile.PROTOCOLS_SSL_V2`
            * :attr:`LBServerSslProfile.PROTOCOLS_SSL_V3`
            * :attr:`LBServerSslProfile.PROTOCOLS_TLS_V1`
            * :attr:`LBServerSslProfile.PROTOCOLS_TLS_V1_1`
            * :attr:`LBServerSslProfile.PROTOCOLS_TLS_V1_2`
            
            SSL versions TLS1.1 and TLS1.2 are supported and enabled by
            default. SSLv2, SSLv3, and TLS1.0 are supported, but disabled by
            default.
        :type  session_cache_enabled: :class:`bool` or ``None``
        :param session_cache_enabled: SSL session caching allows SSL client and server to reuse
            previously negotiated security parameters avoiding the expensive
            public key operation during handshake.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.cipher_group_label = cipher_group_label
        self.ciphers = ciphers
        self.is_fips = is_fips
        self.is_secure = is_secure
        self.protocols = protocols
        self.session_cache_enabled = session_cache_enabled
        VapiStruct.__init__(self)


LBServerSslProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_server_ssl_profile', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'cipher_group_label': type.OptionalType(type.StringType()),
        'ciphers': type.OptionalType(type.ListType(type.StringType())),
        'is_fips': type.OptionalType(type.BooleanType()),
        'is_secure': type.OptionalType(type.BooleanType()),
        'protocols': type.OptionalType(type.ListType(type.StringType())),
        'session_cache_enabled': type.OptionalType(type.BooleanType()),
    },
    LBServerSslProfile,
    False,
    None))



class LBServerSslProfileBinding(VapiStruct):
    """
    Server SSL profile binding.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    SERVER_AUTH_REQUIRED = "REQUIRED"
    """


    """
    SERVER_AUTH_IGNORE = "IGNORE"
    """


    """
    SERVER_AUTH_AUTO_APPLY = "AUTO_APPLY"
    """


    """



    _canonical_to_pep_names = {
                            'certificate_chain_depth': 'certificate_chain_depth',
                            'client_certificate_path': 'client_certificate_path',
                            'server_auth': 'server_auth',
                            'server_auth_ca_paths': 'server_auth_ca_paths',
                            'server_auth_crl_paths': 'server_auth_crl_paths',
                            'ssl_profile_path': 'ssl_profile_path',
                            }

    def __init__(self,
                 certificate_chain_depth=None,
                 client_certificate_path=None,
                 server_auth=None,
                 server_auth_ca_paths=None,
                 server_auth_crl_paths=None,
                 ssl_profile_path=None,
                ):
        """
        :type  certificate_chain_depth: :class:`long` or ``None``
        :param certificate_chain_depth: Authentication depth is used to set the verification depth in the
            server certificates chain. format: int64
        :type  client_certificate_path: :class:`str` or ``None``
        :param client_certificate_path: To support client authentication (load balancer acting as a client
            authenticating to the backend server), client certificate can be
            specified in the server-side SSL profile binding
        :type  server_auth: :class:`str` or ``None``
        :param server_auth: Possible values are: 
            
            * :attr:`LBServerSslProfileBinding.SERVER_AUTH_REQUIRED`
            * :attr:`LBServerSslProfileBinding.SERVER_AUTH_IGNORE`
            * :attr:`LBServerSslProfileBinding.SERVER_AUTH_AUTO_APPLY`
            
             Server authentication mode.
        :type  server_auth_ca_paths: :class:`list` of :class:`str` or ``None``
        :param server_auth_ca_paths: If server auth type is REQUIRED, server certificate must be signed
            by one of the trusted Certificate Authorities (CAs), also referred
            to as root CAs, whose self signed certificates are specified.
        :type  server_auth_crl_paths: :class:`list` of :class:`str` or ``None``
        :param server_auth_crl_paths: A Certificate Revocation List (CRL) can be specified in the
            server-side SSL profile binding to disallow compromised server
            certificates.
        :type  ssl_profile_path: :class:`str` or ``None``
        :param ssl_profile_path: Server SSL profile defines reusable, application-independent server
            side SSL properties.
        """
        self.certificate_chain_depth = certificate_chain_depth
        self.client_certificate_path = client_certificate_path
        self.server_auth = server_auth
        self.server_auth_ca_paths = server_auth_ca_paths
        self.server_auth_crl_paths = server_auth_crl_paths
        self.ssl_profile_path = ssl_profile_path
        VapiStruct.__init__(self)


LBServerSslProfileBinding._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_server_ssl_profile_binding', {
        'certificate_chain_depth': type.OptionalType(type.IntegerType()),
        'client_certificate_path': type.OptionalType(type.StringType()),
        'server_auth': type.OptionalType(type.StringType()),
        'server_auth_ca_paths': type.OptionalType(type.ListType(type.StringType())),
        'server_auth_crl_paths': type.OptionalType(type.ListType(type.StringType())),
        'ssl_profile_path': type.OptionalType(type.StringType()),
    },
    LBServerSslProfileBinding,
    False,
    None))



class LBServerSslProfileListResult(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`LBServerSslProfile` or ``None``
        :param results: Paginated list of load balancer server SSL profiles
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


LBServerSslProfileListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_server_ssl_profile_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'LBServerSslProfile'))),
    },
    LBServerSslProfileListResult,
    False,
    None))



class LBService(VapiStruct):
    """
    Loadbalancer Service.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    ERROR_LOG_LEVEL_DEBUG = "DEBUG"
    """


    """
    ERROR_LOG_LEVEL_INFO = "INFO"
    """


    """
    ERROR_LOG_LEVEL_WARNING = "WARNING"
    """


    """
    ERROR_LOG_LEVEL_ERROR = "ERROR"
    """


    """
    ERROR_LOG_LEVEL_CRITICAL = "CRITICAL"
    """


    """
    ERROR_LOG_LEVEL_ALERT = "ALERT"
    """


    """
    ERROR_LOG_LEVEL_EMERGENCY = "EMERGENCY"
    """


    """
    SIZE_SMALL = "SMALL"
    """


    """
    SIZE_MEDIUM = "MEDIUM"
    """


    """
    SIZE_LARGE = "LARGE"
    """


    """
    SIZE_XLARGE = "XLARGE"
    """


    """
    SIZE_DLB = "DLB"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'access_log_enabled': 'access_log_enabled',
                            'connectivity_path': 'connectivity_path',
                            'enabled': 'enabled',
                            'error_log_level': 'error_log_level',
                            'relax_scale_validation': 'relax_scale_validation',
                            'size': 'size',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 access_log_enabled=None,
                 connectivity_path=None,
                 enabled=None,
                 error_log_level=None,
                 relax_scale_validation=None,
                 size=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  access_log_enabled: :class:`bool` or ``None``
        :param access_log_enabled: Flag to enable access log
        :type  connectivity_path: :class:`str` or ``None``
        :param connectivity_path: LBS could be instantiated (or created) on the Tier-1, etc. For now,
            only the Tier-1 object is supported.
        :type  enabled: :class:`bool` or ``None``
        :param enabled: Flag to enable the load balancer service.
        :type  error_log_level: :class:`str` or ``None``
        :param error_log_level: Possible values are: 
            
            * :attr:`LBService.ERROR_LOG_LEVEL_DEBUG`
            * :attr:`LBService.ERROR_LOG_LEVEL_INFO`
            * :attr:`LBService.ERROR_LOG_LEVEL_WARNING`
            * :attr:`LBService.ERROR_LOG_LEVEL_ERROR`
            * :attr:`LBService.ERROR_LOG_LEVEL_CRITICAL`
            * :attr:`LBService.ERROR_LOG_LEVEL_ALERT`
            * :attr:`LBService.ERROR_LOG_LEVEL_EMERGENCY`
            
            Load balancer engine writes information about encountered issues of
            different severity levels to the error log. This setting is used to
            define the severity level of the error log.
        :type  relax_scale_validation: :class:`bool` or ``None``
        :param relax_scale_validation: If relax_scale_validation is true, the scale validations for
            virtual servers/pools/pool members/rules are relaxed for load
            balancer service. When load balancer service is deployed on edge
            nodes, the scale of virtual servers/pools/pool members for the load
            balancer service should not exceed the scale number of the largest
            load balancer size which could be configured on a certain edge form
            factor. For example, the largest load balancer size supported on a
            MEDIUM edge node is MEDIUM. So one SMALL load balancer deployed on
            MEDIUM edge nodes can support the scale number of MEDIUM load
            balancer. It is not recommended to enable active monitors if
            relax_scale_validation is true due to performance consideration. If
            relax_scale_validation is false, scale numbers should be validated
            for load balancer service.
        :type  size: :class:`str` or ``None``
        :param size: Possible values are: 
            
            * :attr:`LBService.SIZE_SMALL`
            * :attr:`LBService.SIZE_MEDIUM`
            * :attr:`LBService.SIZE_LARGE`
            * :attr:`LBService.SIZE_XLARGE`
            * :attr:`LBService.SIZE_DLB`
            
             Load balancer service size.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.access_log_enabled = access_log_enabled
        self.connectivity_path = connectivity_path
        self.enabled = enabled
        self.error_log_level = error_log_level
        self.relax_scale_validation = relax_scale_validation
        self.size = size
        VapiStruct.__init__(self)


LBService._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_service', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'access_log_enabled': type.OptionalType(type.BooleanType()),
        'connectivity_path': type.OptionalType(type.StringType()),
        'enabled': type.OptionalType(type.BooleanType()),
        'error_log_level': type.OptionalType(type.StringType()),
        'relax_scale_validation': type.OptionalType(type.BooleanType()),
        'size': type.OptionalType(type.StringType()),
    },
    LBService,
    False,
    None))



class LBServiceCountPerSeverity(VapiStruct):
    """
    The service count for specific load balancer usage severity.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    SEVERITY_GREEN = "GREEN"
    """


    """
    SEVERITY_ORANGE = "ORANGE"
    """


    """
    SEVERITY_RED = "RED"
    """


    """



    _canonical_to_pep_names = {
                            'service_count': 'service_count',
                            'severity': 'severity',
                            }

    def __init__(self,
                 service_count=None,
                 severity=None,
                ):
        """
        :type  service_count: :class:`long` or ``None``
        :param service_count: Service count for specific serverity. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  severity: :class:`str` or ``None``
        :param severity: Possible values are: 
            
            * :attr:`LBServiceCountPerSeverity.SEVERITY_GREEN`
            * :attr:`LBServiceCountPerSeverity.SEVERITY_ORANGE`
            * :attr:`LBServiceCountPerSeverity.SEVERITY_RED`
            
            The severity calculation is based on current usage percentage for
            one load balancer service.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.service_count = service_count
        self.severity = severity
        VapiStruct.__init__(self)


LBServiceCountPerSeverity._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_service_count_per_severity', {
        'service_count': type.OptionalType(type.IntegerType()),
        'severity': type.OptionalType(type.StringType()),
    },
    LBServiceCountPerSeverity,
    False,
    None))



class LBServiceListResult(VapiStruct):
    """
    Paged Collection of LBServices

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`LBService` or ``None``
        :param results: LBService list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


LBServiceListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_service_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'LBService'))),
    },
    LBServiceListResult,
    False,
    None))



class LBServiceStatistics(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'last_update_timestamp': 'last_update_timestamp',
                            'pools': 'pools',
                            'service_path': 'service_path',
                            'statistics': 'statistics',
                            'virtual_servers': 'virtual_servers',
                            'alarm': 'alarm',
                            'enforcement_point_path': 'enforcement_point_path',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 last_update_timestamp=None,
                 pools=None,
                 service_path=None,
                 statistics=None,
                 virtual_servers=None,
                 alarm=None,
                 enforcement_point_path=None,
                 resource_type=None,
                ):
        """
        :type  last_update_timestamp: :class:`long` or ``None``
        :param last_update_timestamp: Timestamp when the data was last updated. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  pools: :class:`list` of :class:`LBPoolStatistics` or ``None``
        :param pools: Statistics of load balancer pools
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  service_path: :class:`str` or ``None``
        :param service_path: load balancer service identifier.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  statistics: :class:`LBServiceStatisticsCounter` or ``None``
        :param statistics: Load balancer service statistics counter.
        :type  virtual_servers: :class:`list` of :class:`LBVirtualServerStatistics` or ``None``
        :param virtual_servers: Statistics of load balancer virtual servers.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  alarm: :class:`PolicyRuntimeAlarm` or ``None``
        :param alarm: Alarm information details.
        :type  enforcement_point_path: :class:`str` or ``None``
        :param enforcement_point_path: Policy Path referencing the enforcement point where the info is
            fetched.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  resource_type: :class:`str`
        :param resource_type: 
        """
        self.last_update_timestamp = last_update_timestamp
        self.pools = pools
        self.service_path = service_path
        self.statistics = statistics
        self.virtual_servers = virtual_servers
        self.alarm = alarm
        self.enforcement_point_path = enforcement_point_path
        self._resource_type = resource_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

LBServiceStatistics._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_service_statistics', {
        'last_update_timestamp': type.OptionalType(type.IntegerType()),
        'pools': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'LBPoolStatistics'))),
        'service_path': type.OptionalType(type.StringType()),
        'statistics': type.OptionalType(type.ReferenceType(__name__, 'LBServiceStatisticsCounter')),
        'virtual_servers': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'LBVirtualServerStatistics'))),
        'alarm': type.OptionalType(type.ReferenceType(__name__, 'PolicyRuntimeAlarm')),
        'enforcement_point_path': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
    },
    LBServiceStatistics,
    False,
    None))



class LBServiceStatisticsCounter(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'l4_current_session_rate': 'l4_current_session_rate',
                            'l4_current_sessions': 'l4_current_sessions',
                            'l4_max_sessions': 'l4_max_sessions',
                            'l4_total_sessions': 'l4_total_sessions',
                            'l7_current_session_rate': 'l7_current_session_rate',
                            'l7_current_sessions': 'l7_current_sessions',
                            'l7_max_sessions': 'l7_max_sessions',
                            'l7_total_sessions': 'l7_total_sessions',
                            }

    def __init__(self,
                 l4_current_session_rate=None,
                 l4_current_sessions=None,
                 l4_max_sessions=None,
                 l4_total_sessions=None,
                 l7_current_session_rate=None,
                 l7_current_sessions=None,
                 l7_max_sessions=None,
                 l7_total_sessions=None,
                ):
        """
        :type  l4_current_session_rate: :class:`float` or ``None``
        :param l4_current_session_rate: The average number of l4 current sessions per second, the number is
            averaged over the last 5 one-second intervals.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  l4_current_sessions: :class:`long` or ``None``
        :param l4_current_sessions: Number of l4 current sessions. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  l4_max_sessions: :class:`long` or ``None``
        :param l4_max_sessions: L4 max sessions is used to show the peak L4 max session data since
            load balancer starts to provide service. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  l4_total_sessions: :class:`long` or ``None``
        :param l4_total_sessions: Number of l4 total sessions. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  l7_current_session_rate: :class:`float` or ``None``
        :param l7_current_session_rate: The average number of l7 current requests per second, the number is
            averaged over the last 5 one-second intervals.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  l7_current_sessions: :class:`long` or ``None``
        :param l7_current_sessions: Number of l7 current sessions. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  l7_max_sessions: :class:`long` or ``None``
        :param l7_max_sessions: L7 max sessions is used to show the peak L7 max session data since
            load balancer starts to provide service. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  l7_total_sessions: :class:`long` or ``None``
        :param l7_total_sessions: Number of l7 total sessions. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.l4_current_session_rate = l4_current_session_rate
        self.l4_current_sessions = l4_current_sessions
        self.l4_max_sessions = l4_max_sessions
        self.l4_total_sessions = l4_total_sessions
        self.l7_current_session_rate = l7_current_session_rate
        self.l7_current_sessions = l7_current_sessions
        self.l7_max_sessions = l7_max_sessions
        self.l7_total_sessions = l7_total_sessions
        VapiStruct.__init__(self)


LBServiceStatisticsCounter._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_service_statistics_counter', {
        'l4_current_session_rate': type.OptionalType(type.DoubleType()),
        'l4_current_sessions': type.OptionalType(type.IntegerType()),
        'l4_max_sessions': type.OptionalType(type.IntegerType()),
        'l4_total_sessions': type.OptionalType(type.IntegerType()),
        'l7_current_session_rate': type.OptionalType(type.DoubleType()),
        'l7_current_sessions': type.OptionalType(type.IntegerType()),
        'l7_max_sessions': type.OptionalType(type.IntegerType()),
        'l7_total_sessions': type.OptionalType(type.IntegerType()),
    },
    LBServiceStatisticsCounter,
    False,
    None))



class LBServiceStatisticsPerEP(VapiStruct):
    """
    LBServiceStatistics on specific Enforcement Point

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "LBServiceStatisticsPerEP"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'alarm': 'alarm',
                            'enforcement_point_path': 'enforcement_point_path',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 alarm=None,
                 enforcement_point_path=None,
                 resource_type='LBServiceStatisticsPerEP',
                ):
        """
        :type  alarm: :class:`PolicyRuntimeAlarm` or ``None``
        :param alarm: Alarm information details.
        :type  enforcement_point_path: :class:`str` or ``None``
        :param enforcement_point_path: Policy Path referencing the enforcement point where the info is
            fetched.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  resource_type: :class:`str`
        :param resource_type: 
        """
        self.alarm = alarm
        self.enforcement_point_path = enforcement_point_path
        self._resource_type = resource_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

LBServiceStatisticsPerEP._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_service_statistics_per_EP', {
        'alarm': type.OptionalType(type.ReferenceType(__name__, 'PolicyRuntimeAlarm')),
        'enforcement_point_path': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
    },
    LBServiceStatisticsPerEP,
    False,
    None))



class LBServiceStatus(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "LBServiceStatus"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    SERVICE_STATUS_UP = "UP"
    """


    """
    SERVICE_STATUS_DOWN = "DOWN"
    """


    """
    SERVICE_STATUS_ERROR = "ERROR"
    """


    """
    SERVICE_STATUS_NO_STANDBY = "NO_STANDBY"
    """


    """
    SERVICE_STATUS_DETACHED = "DETACHED"
    """


    """
    SERVICE_STATUS_DISABLED = "DISABLED"
    """


    """
    SERVICE_STATUS_UNKNOWN = "UNKNOWN"
    """


    """



    _canonical_to_pep_names = {
                            'active_transport_nodes': 'active_transport_nodes',
                            'cpu_usage': 'cpu_usage',
                            'error_message': 'error_message',
                            'last_update_timestamp': 'last_update_timestamp',
                            'memory_usage': 'memory_usage',
                            'pools': 'pools',
                            'service_path': 'service_path',
                            'service_status': 'service_status',
                            'standby_transport_nodes': 'standby_transport_nodes',
                            'virtual_servers': 'virtual_servers',
                            'alarm': 'alarm',
                            'enforcement_point_path': 'enforcement_point_path',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 active_transport_nodes=None,
                 cpu_usage=None,
                 error_message=None,
                 last_update_timestamp=None,
                 memory_usage=None,
                 pools=None,
                 service_path=None,
                 service_status=None,
                 standby_transport_nodes=None,
                 virtual_servers=None,
                 alarm=None,
                 enforcement_point_path=None,
                 resource_type='LBServiceStatus',
                ):
        """
        :type  active_transport_nodes: :class:`list` of :class:`str` or ``None``
        :param active_transport_nodes: Ids of load balancer service related active transport nodes.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  cpu_usage: :class:`long` or ``None``
        :param cpu_usage: Cpu usage in percentage. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  error_message: :class:`str` or ``None``
        :param error_message: Error message, if available.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_update_timestamp: :class:`long` or ``None``
        :param last_update_timestamp: Timestamp when the data was last updated. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  memory_usage: :class:`long` or ``None``
        :param memory_usage: Memory usage in percentage. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  pools: :class:`list` of :class:`LBPoolStatus` or ``None``
        :param pools: status of load balancer pools.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  service_path: :class:`str` or ``None``
        :param service_path: Load balancer service object path.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  service_status: :class:`str` or ``None``
        :param service_status: Possible values are: 
            
            * :attr:`LBServiceStatus.SERVICE_STATUS_UP`
            * :attr:`LBServiceStatus.SERVICE_STATUS_DOWN`
            * :attr:`LBServiceStatus.SERVICE_STATUS_ERROR`
            * :attr:`LBServiceStatus.SERVICE_STATUS_NO_STANDBY`
            * :attr:`LBServiceStatus.SERVICE_STATUS_DETACHED`
            * :attr:`LBServiceStatus.SERVICE_STATUS_DISABLED`
            * :attr:`LBServiceStatus.SERVICE_STATUS_UNKNOWN`
            
            UP means the load balancer service is working fine on both
            transport-nodes(if have); DOWN means the load balancer service is
            down on both transport-nodes (if have), hence the load balancer
            will not respond to any requests; ERROR means error happens on
            transport-node(s) or no status is reported from transport-node(s).
            The load balancer service may be working (or not working);
            NO_STANDBY means load balancer service is working in one of the
            transport node while not in the other transport-node (if have).
            Hence if the load balancer service in the working transport-node
            goes down, the load balancer service will go down; DETACHED means
            that the load balancer service has no attachment setting and is not
            instantiated in any transport nodes; DISABLED means that admin
            state of load balancer service is DISABLED; UNKNOWN means that no
            status reported from transport-nodes.The load balancer service may
            be working(or not working).
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  standby_transport_nodes: :class:`list` of :class:`str` or ``None``
        :param standby_transport_nodes: Ids of load balancer service related standby transport nodes.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  virtual_servers: :class:`list` of :class:`LBVirtualServerStatus` or ``None``
        :param virtual_servers: status of load balancer virtual servers.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  alarm: :class:`PolicyRuntimeAlarm` or ``None``
        :param alarm: Alarm information details.
        :type  enforcement_point_path: :class:`str` or ``None``
        :param enforcement_point_path: Policy Path referencing the enforcement point where the info is
            fetched.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  resource_type: :class:`str`
        :param resource_type: 
        """
        self.active_transport_nodes = active_transport_nodes
        self.cpu_usage = cpu_usage
        self.error_message = error_message
        self.last_update_timestamp = last_update_timestamp
        self.memory_usage = memory_usage
        self.pools = pools
        self.service_path = service_path
        self.service_status = service_status
        self.standby_transport_nodes = standby_transport_nodes
        self.virtual_servers = virtual_servers
        self.alarm = alarm
        self.enforcement_point_path = enforcement_point_path
        self._resource_type = resource_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

LBServiceStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_service_status', {
        'active_transport_nodes': type.OptionalType(type.ListType(type.StringType())),
        'cpu_usage': type.OptionalType(type.IntegerType()),
        'error_message': type.OptionalType(type.StringType()),
        'last_update_timestamp': type.OptionalType(type.IntegerType()),
        'memory_usage': type.OptionalType(type.IntegerType()),
        'pools': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'LBPoolStatus'))),
        'service_path': type.OptionalType(type.StringType()),
        'service_status': type.OptionalType(type.StringType()),
        'standby_transport_nodes': type.OptionalType(type.ListType(type.StringType())),
        'virtual_servers': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'LBVirtualServerStatus'))),
        'alarm': type.OptionalType(type.ReferenceType(__name__, 'PolicyRuntimeAlarm')),
        'enforcement_point_path': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
    },
    LBServiceStatus,
    False,
    None))



class LBServiceStatusPerEP(VapiStruct):
    """
    LBServiceStatus on specific Enforcement Point

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "LBServiceStatusPerEP"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'alarm': 'alarm',
                            'enforcement_point_path': 'enforcement_point_path',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 alarm=None,
                 enforcement_point_path=None,
                 resource_type='LBServiceStatusPerEP',
                ):
        """
        :type  alarm: :class:`PolicyRuntimeAlarm` or ``None``
        :param alarm: Alarm information details.
        :type  enforcement_point_path: :class:`str` or ``None``
        :param enforcement_point_path: Policy Path referencing the enforcement point where the info is
            fetched.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  resource_type: :class:`str`
        :param resource_type: 
        """
        self.alarm = alarm
        self.enforcement_point_path = enforcement_point_path
        self._resource_type = resource_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

LBServiceStatusPerEP._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_service_status_per_EP', {
        'alarm': type.OptionalType(type.ReferenceType(__name__, 'PolicyRuntimeAlarm')),
        'enforcement_point_path': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
    },
    LBServiceStatusPerEP,
    False,
    None))



class LBServiceUsage(VapiStruct):
    """
    Describes the capacity and current usage of virtual servers, pools and pool
    members for the given load balancer service.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "LBServiceUsage"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    SERVICE_SIZE_SMALL = "SMALL"
    """


    """
    SERVICE_SIZE_MEDIUM = "MEDIUM"
    """


    """
    SERVICE_SIZE_LARGE = "LARGE"
    """


    """
    SERVICE_SIZE_XLARGE = "XLARGE"
    """


    """
    SERVICE_SIZE_DLB = "DLB"
    """


    """
    SEVERITY_GREEN = "GREEN"
    """


    """
    SEVERITY_ORANGE = "ORANGE"
    """


    """
    SEVERITY_RED = "RED"
    """


    """



    _canonical_to_pep_names = {
                            'current_pool_count': 'current_pool_count',
                            'current_pool_member_count': 'current_pool_member_count',
                            'current_virtual_server_count': 'current_virtual_server_count',
                            'last_update_timestamp': 'last_update_timestamp',
                            'pool_capacity': 'pool_capacity',
                            'pool_member_capacity': 'pool_member_capacity',
                            'service_path': 'service_path',
                            'service_size': 'service_size',
                            'severity': 'severity',
                            'usage_percentage': 'usage_percentage',
                            'virtual_server_capacity': 'virtual_server_capacity',
                            'alarm': 'alarm',
                            'enforcement_point_path': 'enforcement_point_path',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 current_pool_count=None,
                 current_pool_member_count=None,
                 current_virtual_server_count=None,
                 last_update_timestamp=None,
                 pool_capacity=None,
                 pool_member_capacity=None,
                 service_path=None,
                 service_size=None,
                 severity=None,
                 usage_percentage=None,
                 virtual_server_capacity=None,
                 alarm=None,
                 enforcement_point_path=None,
                 resource_type='LBServiceUsage',
                ):
        """
        :type  current_pool_count: :class:`long` or ``None``
        :param current_pool_count: The current number of pools which has been configured in the given
            load balancer service. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  current_pool_member_count: :class:`long` or ``None``
        :param current_pool_member_count: The current number of pool members which has been configured in the
            given load balancer service. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  current_virtual_server_count: :class:`long` or ``None``
        :param current_virtual_server_count: The current number of virtual servers which has been configured in
            the given load balancer service. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_update_timestamp: :class:`long` or ``None``
        :param last_update_timestamp: Timestamp when the data was last updated. format: int64
        :type  pool_capacity: :class:`long` or ``None``
        :param pool_capacity: Pool capacity means maximum number of pools which could be
            configured in the given load balancer service. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  pool_member_capacity: :class:`long` or ``None``
        :param pool_member_capacity: Pool member capacity means maximum number of pool members which
            could be configured in the given load balancer service. format:
            int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  service_path: :class:`str` or ``None``
        :param service_path: LBService object path.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  service_size: :class:`str` or ``None``
        :param service_size: Possible values are: 
            
            * :attr:`LBServiceUsage.SERVICE_SIZE_SMALL`
            * :attr:`LBServiceUsage.SERVICE_SIZE_MEDIUM`
            * :attr:`LBServiceUsage.SERVICE_SIZE_LARGE`
            * :attr:`LBServiceUsage.SERVICE_SIZE_XLARGE`
            * :attr:`LBServiceUsage.SERVICE_SIZE_DLB`
            
             The size of load balancer service.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  severity: :class:`str` or ``None``
        :param severity: Possible values are: 
            
            * :attr:`LBServiceUsage.SEVERITY_GREEN`
            * :attr:`LBServiceUsage.SEVERITY_ORANGE`
            * :attr:`LBServiceUsage.SEVERITY_RED`
            
            The severity calculation is based on the largest usage percentage
            from virtual servers, pools and pool members for one load balancer
            service.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  usage_percentage: :class:`float` or ``None``
        :param usage_percentage: The usage percentage is the largest usage percentage from virtual
            servers, pools and pool members for the load balancer service. If
            the property relax_scale_validation is set as true for LBService,
            it is possible that the value is larger than 100.0. For example, if
            SMALL LBS is deployed on MEDIUM edge node and configured with
            MEDIUM LBS virtual server scale number, LBS usage percentage is
            shown larger than 100.0.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  virtual_server_capacity: :class:`long` or ``None``
        :param virtual_server_capacity: Virtual server capacity means maximum number of virtual servers
            which could be configured in the given load balancer service.
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  alarm: :class:`PolicyRuntimeAlarm` or ``None``
        :param alarm: Alarm information details.
        :type  enforcement_point_path: :class:`str` or ``None``
        :param enforcement_point_path: Policy Path referencing the enforcement point where the info is
            fetched.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  resource_type: :class:`str`
        :param resource_type: 
        """
        self.current_pool_count = current_pool_count
        self.current_pool_member_count = current_pool_member_count
        self.current_virtual_server_count = current_virtual_server_count
        self.last_update_timestamp = last_update_timestamp
        self.pool_capacity = pool_capacity
        self.pool_member_capacity = pool_member_capacity
        self.service_path = service_path
        self.service_size = service_size
        self.severity = severity
        self.usage_percentage = usage_percentage
        self.virtual_server_capacity = virtual_server_capacity
        self.alarm = alarm
        self.enforcement_point_path = enforcement_point_path
        self._resource_type = resource_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

LBServiceUsage._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_service_usage', {
        'current_pool_count': type.OptionalType(type.IntegerType()),
        'current_pool_member_count': type.OptionalType(type.IntegerType()),
        'current_virtual_server_count': type.OptionalType(type.IntegerType()),
        'last_update_timestamp': type.OptionalType(type.IntegerType()),
        'pool_capacity': type.OptionalType(type.IntegerType()),
        'pool_member_capacity': type.OptionalType(type.IntegerType()),
        'service_path': type.OptionalType(type.StringType()),
        'service_size': type.OptionalType(type.StringType()),
        'severity': type.OptionalType(type.StringType()),
        'usage_percentage': type.OptionalType(type.DoubleType()),
        'virtual_server_capacity': type.OptionalType(type.IntegerType()),
        'alarm': type.OptionalType(type.ReferenceType(__name__, 'PolicyRuntimeAlarm')),
        'enforcement_point_path': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
    },
    LBServiceUsage,
    False,
    None))



class LBServiceUsagePerEP(VapiStruct):
    """
    LBServiceUsage on specific Enforcement Point

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "LBServiceUsagePerEP"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'alarm': 'alarm',
                            'enforcement_point_path': 'enforcement_point_path',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 alarm=None,
                 enforcement_point_path=None,
                 resource_type='LBServiceUsagePerEP',
                ):
        """
        :type  alarm: :class:`PolicyRuntimeAlarm` or ``None``
        :param alarm: Alarm information details.
        :type  enforcement_point_path: :class:`str` or ``None``
        :param enforcement_point_path: Policy Path referencing the enforcement point where the info is
            fetched.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  resource_type: :class:`str`
        :param resource_type: 
        """
        self.alarm = alarm
        self.enforcement_point_path = enforcement_point_path
        self._resource_type = resource_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

LBServiceUsagePerEP._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_service_usage_per_EP', {
        'alarm': type.OptionalType(type.ReferenceType(__name__, 'PolicyRuntimeAlarm')),
        'enforcement_point_path': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
    },
    LBServiceUsagePerEP,
    False,
    None))



class LBServiceUsageSummary(VapiStruct):
    """
    Describes usage summary of virtual servers, pools and pool members for all
    load balancer services.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    POOL_MEMBER_SEVERITY_GREEN = "GREEN"
    """


    """
    POOL_MEMBER_SEVERITY_ORANGE = "ORANGE"
    """


    """
    POOL_MEMBER_SEVERITY_RED = "RED"
    """


    """
    POOL_SEVERITY_GREEN = "GREEN"
    """


    """
    POOL_SEVERITY_ORANGE = "ORANGE"
    """


    """
    POOL_SEVERITY_RED = "RED"
    """


    """
    VIRTUAL_SERVER_SEVERITY_GREEN = "GREEN"
    """


    """
    VIRTUAL_SERVER_SEVERITY_ORANGE = "ORANGE"
    """


    """
    VIRTUAL_SERVER_SEVERITY_RED = "RED"
    """


    """



    _canonical_to_pep_names = {
                            'current_pool_count': 'current_pool_count',
                            'current_pool_member_count': 'current_pool_member_count',
                            'current_virtual_server_count': 'current_virtual_server_count',
                            'pool_capacity': 'pool_capacity',
                            'pool_member_capacity': 'pool_member_capacity',
                            'pool_member_severity': 'pool_member_severity',
                            'pool_member_usage_percentage': 'pool_member_usage_percentage',
                            'pool_severity': 'pool_severity',
                            'pool_usage_percentage': 'pool_usage_percentage',
                            'service_counts': 'service_counts',
                            'service_usages': 'service_usages',
                            'virtual_server_capacity': 'virtual_server_capacity',
                            'virtual_server_severity': 'virtual_server_severity',
                            'virtual_server_usage_percentage': 'virtual_server_usage_percentage',
                            }

    def __init__(self,
                 current_pool_count=None,
                 current_pool_member_count=None,
                 current_virtual_server_count=None,
                 pool_capacity=None,
                 pool_member_capacity=None,
                 pool_member_severity=None,
                 pool_member_usage_percentage=None,
                 pool_severity=None,
                 pool_usage_percentage=None,
                 service_counts=None,
                 service_usages=None,
                 virtual_server_capacity=None,
                 virtual_server_severity=None,
                 virtual_server_usage_percentage=None,
                ):
        """
        :type  current_pool_count: :class:`long` or ``None``
        :param current_pool_count: The current count of pools configured for all load balancer
            services. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  current_pool_member_count: :class:`long` or ``None``
        :param current_pool_member_count: The current count of pool members configured for all load balancer
            services. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  current_virtual_server_count: :class:`long` or ``None``
        :param current_virtual_server_count: The current count of virtual servers configured for all load
            balancer services. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  pool_capacity: :class:`long` or ``None``
        :param pool_capacity: Pool capacity means maximum number of pools which can be configured
            for all load balancer services. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  pool_member_capacity: :class:`long` or ``None``
        :param pool_member_capacity: Pool capacity means maximum number of pool members which can be
            configured for all load balancer services. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  pool_member_severity: :class:`str` or ``None``
        :param pool_member_severity: Possible values are: 
            
            * :attr:`LBServiceUsageSummary.POOL_MEMBER_SEVERITY_GREEN`
            * :attr:`LBServiceUsageSummary.POOL_MEMBER_SEVERITY_ORANGE`
            * :attr:`LBServiceUsageSummary.POOL_MEMBER_SEVERITY_RED`
            
            The severity calculation is based on the overall usage percentage
            of pool members for all load balancer services.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  pool_member_usage_percentage: :class:`float` or ``None``
        :param pool_member_usage_percentage: Overall pool member usage percentage for all load balancer
            services.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  pool_severity: :class:`str` or ``None``
        :param pool_severity: Possible values are: 
            
            * :attr:`LBServiceUsageSummary.POOL_SEVERITY_GREEN`
            * :attr:`LBServiceUsageSummary.POOL_SEVERITY_ORANGE`
            * :attr:`LBServiceUsageSummary.POOL_SEVERITY_RED`
            
            The severity calculation is based on the overall usage percentage
            of pools for all load balancer services.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  pool_usage_percentage: :class:`float` or ``None``
        :param pool_usage_percentage: Overall pool usage percentage for all load balancer services.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  service_counts: :class:`list` of :class:`LBServiceCountPerSeverity` or ``None``
        :param service_counts: The service count for each load balancer usage severity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  service_usages: :class:`list` of :class:`LBServiceUsage` or ``None``
        :param service_usages: The property identifies all lb service usages. By default, it is
            not included in response. It exists when parameter
            ?include_usages=true.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  virtual_server_capacity: :class:`long` or ``None``
        :param virtual_server_capacity: Virtual server capacity means maximum number of virtual servers
            which can be configured for all load balancer services. format:
            int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  virtual_server_severity: :class:`str` or ``None``
        :param virtual_server_severity: Possible values are: 
            
            * :attr:`LBServiceUsageSummary.VIRTUAL_SERVER_SEVERITY_GREEN`
            * :attr:`LBServiceUsageSummary.VIRTUAL_SERVER_SEVERITY_ORANGE`
            * :attr:`LBServiceUsageSummary.VIRTUAL_SERVER_SEVERITY_RED`
            
            The severity calculation is based on the overall usage percentage
            of virtual servers for all load balancer services.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  virtual_server_usage_percentage: :class:`float` or ``None``
        :param virtual_server_usage_percentage: Overall virtual server usage percentage for all load balancer
            services.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.current_pool_count = current_pool_count
        self.current_pool_member_count = current_pool_member_count
        self.current_virtual_server_count = current_virtual_server_count
        self.pool_capacity = pool_capacity
        self.pool_member_capacity = pool_member_capacity
        self.pool_member_severity = pool_member_severity
        self.pool_member_usage_percentage = pool_member_usage_percentage
        self.pool_severity = pool_severity
        self.pool_usage_percentage = pool_usage_percentage
        self.service_counts = service_counts
        self.service_usages = service_usages
        self.virtual_server_capacity = virtual_server_capacity
        self.virtual_server_severity = virtual_server_severity
        self.virtual_server_usage_percentage = virtual_server_usage_percentage
        VapiStruct.__init__(self)


LBServiceUsageSummary._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_service_usage_summary', {
        'current_pool_count': type.OptionalType(type.IntegerType()),
        'current_pool_member_count': type.OptionalType(type.IntegerType()),
        'current_virtual_server_count': type.OptionalType(type.IntegerType()),
        'pool_capacity': type.OptionalType(type.IntegerType()),
        'pool_member_capacity': type.OptionalType(type.IntegerType()),
        'pool_member_severity': type.OptionalType(type.StringType()),
        'pool_member_usage_percentage': type.OptionalType(type.DoubleType()),
        'pool_severity': type.OptionalType(type.StringType()),
        'pool_usage_percentage': type.OptionalType(type.DoubleType()),
        'service_counts': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'LBServiceCountPerSeverity'))),
        'service_usages': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'LBServiceUsage'))),
        'virtual_server_capacity': type.OptionalType(type.IntegerType()),
        'virtual_server_severity': type.OptionalType(type.StringType()),
        'virtual_server_usage_percentage': type.OptionalType(type.DoubleType()),
    },
    LBServiceUsageSummary,
    False,
    None))



class LBSessionCookieTime(VapiStruct):
    """
    Session cookie time.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "LBSessionCookieTime"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'cookie_max_idle': 'cookie_max_idle',
                            'cookie_max_life': 'cookie_max_life',
                            'type': 'type',
                            }

    def __init__(self,
                 cookie_max_idle=None,
                 cookie_max_life=None,
                 type='LBSessionCookieTime',
                ):
        """
        :type  cookie_max_idle: :class:`long` or ``None``
        :param cookie_max_idle: Instead of using HTTP Cookie max-age and relying on client to
            expire the cookie, max idle time and/or max lifetime of the cookie
            can be used. Max idle time, if configured, specifies the maximum
            interval the cookie is valid for from the last time it was seen in
            a request. It is available for insert mode. format: int64
        :type  cookie_max_life: :class:`long` or ``None``
        :param cookie_max_life: Max life time, if configured, specifies the maximum interval the
            cookie is valid for from the first time the cookie was seen in a
            request. It is available for insert mode. format: int64
        :type  type: :class:`str`
        :param type: Possible values are: 
            
            * :attr:`LBCookieTime.TYPE_LBSESSIONCOOKIETIME`
            * :attr:`LBCookieTime.TYPE_LBPERSISTENCECOOKIETIME`
            
            Both session cookie and persistence cookie are supported, Use
            LbSessionCookieTime for session cookie time setting, Use
            LbPersistenceCookieTime for persistence cookie time setting
        """
        self.cookie_max_idle = cookie_max_idle
        self.cookie_max_life = cookie_max_life
        self._type = type
        VapiStruct.__init__(self)

    @property
    def type(self):
        """
        Return the discriminator value
        """
        return self._type

LBSessionCookieTime._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_session_cookie_time', {
        'cookie_max_idle': type.OptionalType(type.IntegerType()),
        'cookie_max_life': type.OptionalType(type.IntegerType()),
        'type': type.StringType(),
    },
    LBSessionCookieTime,
    False,
    None))



class LBSnatAutoMap(VapiStruct):
    """
    Snat auto map.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "LBSnatAutoMap"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'type': 'type',
                            }

    def __init__(self,
                 type='LBSnatAutoMap',
                ):
        """
        :type  type: :class:`str`
        :param type: Possible values are: 
            
            * :attr:`LBSnatTranslation.TYPE_LBSNATAUTOMAP`
            * :attr:`LBSnatTranslation.TYPE_LBSNATIPPOOL`
            * :attr:`LBSnatTranslation.TYPE_LBSNATDISABLED`
            
             Snat translation type.
        """
        self._type = type
        VapiStruct.__init__(self)

    @property
    def type(self):
        """
        Return the discriminator value
        """
        return self._type

LBSnatAutoMap._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_snat_auto_map', {
        'type': type.StringType(),
    },
    LBSnatAutoMap,
    False,
    None))



class LBSnatDisabled(VapiStruct):
    """
    Snat disabled.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "LBSnatDisabled"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'type': 'type',
                            }

    def __init__(self,
                 type='LBSnatDisabled',
                ):
        """
        :type  type: :class:`str`
        :param type: Possible values are: 
            
            * :attr:`LBSnatTranslation.TYPE_LBSNATAUTOMAP`
            * :attr:`LBSnatTranslation.TYPE_LBSNATIPPOOL`
            * :attr:`LBSnatTranslation.TYPE_LBSNATDISABLED`
            
             Snat translation type.
        """
        self._type = type
        VapiStruct.__init__(self)

    @property
    def type(self):
        """
        Return the discriminator value
        """
        return self._type

LBSnatDisabled._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_snat_disabled', {
        'type': type.StringType(),
    },
    LBSnatDisabled,
    False,
    None))



class LBSnatIpElement(VapiStruct):
    """
    Snat Ip element.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'ip_address': 'ip_address',
                            'prefix_length': 'prefix_length',
                            }

    def __init__(self,
                 ip_address=None,
                 prefix_length=None,
                ):
        """
        :type  ip_address: :class:`str` or ``None``
        :param ip_address: Ip address or ip range such as 1.1.1.1 or 1.1.1.101-1.1.1.160.
            format: address-or-block-or-range
        :type  prefix_length: :class:`long` or ``None``
        :param prefix_length: Subnet prefix length should be not specified if there is only one
            single IP address or IP range. format: int64
        """
        self.ip_address = ip_address
        self.prefix_length = prefix_length
        VapiStruct.__init__(self)


LBSnatIpElement._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_snat_ip_element', {
        'ip_address': type.OptionalType(type.StringType()),
        'prefix_length': type.OptionalType(type.IntegerType()),
    },
    LBSnatIpElement,
    False,
    None))



class LBSnatIpPool(VapiStruct):
    """
    Snat Ip pool.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "LBSnatIpPool"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'ip_addresses': 'ip_addresses',
                            'type': 'type',
                            }

    def __init__(self,
                 ip_addresses=None,
                 type='LBSnatIpPool',
                ):
        """
        :type  ip_addresses: :class:`list` of :class:`LBSnatIpElement` or ``None``
        :param ip_addresses: If an IP range is specified, the range may contain no more than 64
            IP addresses.
        :type  type: :class:`str`
        :param type: Possible values are: 
            
            * :attr:`LBSnatTranslation.TYPE_LBSNATAUTOMAP`
            * :attr:`LBSnatTranslation.TYPE_LBSNATIPPOOL`
            * :attr:`LBSnatTranslation.TYPE_LBSNATDISABLED`
            
             Snat translation type.
        """
        self.ip_addresses = ip_addresses
        self._type = type
        VapiStruct.__init__(self)

    @property
    def type(self):
        """
        Return the discriminator value
        """
        return self._type

LBSnatIpPool._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_snat_ip_pool', {
        'ip_addresses': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'LBSnatIpElement'))),
        'type': type.StringType(),
    },
    LBSnatIpPool,
    False,
    None))



class LBSnatTranslation(VapiStruct):
    """
    Snat Translation.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "LBSnatTranslation"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    TYPE_LBSNATAUTOMAP = "LBSnatAutoMap"
    """


    """
    TYPE_LBSNATIPPOOL = "LBSnatIpPool"
    """


    """
    TYPE_LBSNATDISABLED = "LBSnatDisabled"
    """


    """



    _canonical_to_pep_names = {
                            'type': 'type',
                            }

    def __init__(self,
                 type='LBSnatTranslation',
                ):
        """
        :type  type: :class:`str`
        :param type: Possible values are: 
            
            * :attr:`LBSnatTranslation.TYPE_LBSNATAUTOMAP`
            * :attr:`LBSnatTranslation.TYPE_LBSNATIPPOOL`
            * :attr:`LBSnatTranslation.TYPE_LBSNATDISABLED`
            
             Snat translation type.
        """
        self._type = type
        VapiStruct.__init__(self)

    @property
    def type(self):
        """
        Return the discriminator value
        """
        return self._type

LBSnatTranslation._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_snat_translation', {
        'type': type.StringType(),
    },
    LBSnatTranslation,
    False,
    None))



class LBSourceIpPersistenceProfile(VapiStruct):
    """
    Some applications maintain state and require all relevant connections to be
    sent to the same server as the application state is not synchronized among
    servers. Persistence is enabled on a LBVirtualServer by binding a
    persistence profile to it.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "LBSourceIpPersistenceProfile"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    PURGE_NO_PURGE = "NO_PURGE"
    """


    """
    PURGE_FULL = "FULL"
    """


    """



    _canonical_to_pep_names = {
                            'ha_persistence_mirroring_enabled': 'ha_persistence_mirroring_enabled',
                            'purge': 'purge',
                            'timeout': 'timeout',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'persistence_shared': 'persistence_shared',
                            }

    def __init__(self,
                 ha_persistence_mirroring_enabled=None,
                 purge=None,
                 timeout=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='LBSourceIpPersistenceProfile',
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 persistence_shared=None,
                ):
        """
        :type  ha_persistence_mirroring_enabled: :class:`bool` or ``None``
        :param ha_persistence_mirroring_enabled: Persistence entries are not synchronized to the HA peer by default.
        :type  purge: :class:`str` or ``None``
        :param purge: Possible values are: 
            
            * :attr:`LBSourceIpPersistenceProfile.PURGE_NO_PURGE`
            * :attr:`LBSourceIpPersistenceProfile.PURGE_FULL`
            
             Persistence purge setting.
        :type  timeout: :class:`long` or ``None``
        :param timeout: When all connections complete (reference count reaches 0),
            persistence entry timer is started with the expiration time.
            format: int64
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`LBPersistenceProfile.RESOURCE_TYPE_LBSOURCEIPPERSISTENCEPROFILE`
            *
              :attr:`LBPersistenceProfile.RESOURCE_TYPE_LBCOOKIEPERSISTENCEPROFILE`
            *
              :attr:`LBPersistenceProfile.RESOURCE_TYPE_LBGENERICPERSISTENCEPROFILE`
            
             The resource_type property identifies persistence profile type.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  persistence_shared: :class:`bool` or ``None``
        :param persistence_shared: Persistence shared setting indicates that all LBVirtualServers that
            consume this LBPersistenceProfile should share the same persistence
            mechanism when enabled. Meaning, persistence entries of a client
            accessing one virtual server will also affect the same client's
            connections to a different virtual server. For example, say there
            are two virtual servers vip-ip1:80 and vip-ip1:8080 bound to the
            same Group g1 consisting of two servers (s11:80 and s12:80). By
            default, each virtual server will have its own persistence table or
            cookie. So, in the earlier example, there will be two tables
            (vip-ip1:80, p1) and (vip-ip1:8080, p1) or cookies. So, if a client
            connects to vip1:80 and later connects to vip1:8080, the second
            connection may be sent to a different server than the first. When
            persistence_shared is enabled, then the second connection will
            always connect to the same server as the original connection. For
            COOKIE persistence type, the same cookie will be shared by multiple
            virtual servers. For SOURCE_IP persistence type, the persistence
            table will be shared across virtual servers. For GENERIC
            persistence type, the persistence table will be shared across
            virtual servers which consume the same persistence profile in
            LBRule actions.
        """
        self.ha_persistence_mirroring_enabled = ha_persistence_mirroring_enabled
        self.purge = purge
        self.timeout = timeout
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.persistence_shared = persistence_shared
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

LBSourceIpPersistenceProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_source_ip_persistence_profile', {
        'ha_persistence_mirroring_enabled': type.OptionalType(type.BooleanType()),
        'purge': type.OptionalType(type.StringType()),
        'timeout': type.OptionalType(type.IntegerType()),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'persistence_shared': type.OptionalType(type.BooleanType()),
    },
    LBSourceIpPersistenceProfile,
    False,
    None))



class LBSslModeSelectionAction(VapiStruct):
    """
    This action is used to select SSL mode. Three types of SSL mode actions can
    be specified in Transport phase, ssl passthrough, ssl offloading and ssl
    end-to-end.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "LBSslModeSelectionAction"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    SSL_MODE_PASSTHROUGH = "SSL_PASSTHROUGH"
    """


    """
    SSL_MODE_END_TO_END = "SSL_END_TO_END"
    """


    """
    SSL_MODE_OFFLOAD = "SSL_OFFLOAD"
    """


    """



    _canonical_to_pep_names = {
                            'ssl_mode': 'ssl_mode',
                            'type': 'type',
                            }

    def __init__(self,
                 ssl_mode=None,
                 type='LBSslModeSelectionAction',
                ):
        """
        :type  ssl_mode: :class:`str` or ``None``
        :param ssl_mode: Possible values are: 
            
            * :attr:`LBSslModeSelectionAction.SSL_MODE_PASSTHROUGH`
            * :attr:`LBSslModeSelectionAction.SSL_MODE_END_TO_END`
            * :attr:`LBSslModeSelectionAction.SSL_MODE_OFFLOAD`
            
            SSL Passthrough: LB establishes a TCP connection with client and
            another connection with selected backend server. LB won't inspect
            the stream data between client and backend server, but just pass it
            through. Backend server exchanges SSL connection with client. SSL
            Offloading: LB terminiates the connections from client, and
            establishes SSL connection with it. After receiving the HTTP
            request, LB connects the selected backend server and talk with it
            via HTTP without SSL. LB estalishes new connection to selected
            backend server for each HTTP request, in case ntlm or multiplexing
            are NOT configured. SSL End-to-End: LB terminiates the connections
            from client, and establishes SSL connection with it. After
            receiving the HTTP request, LB connects the selected backend server
            and talk with it via HTTPS. LB estalishes new SSL connection to
            selected backend server for each HTTP request, in case ntlm or
            multiplexing are NOT configured.
        :type  type: :class:`str`
        :param type: Possible values are: 
            
            * :attr:`LBRuleAction.TYPE_LBSELECTPOOLACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPREQUESTURIREWRITEACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPREQUESTHEADERREWRITEACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPREJECTACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPREDIRECTACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPRESPONSEHEADERREWRITEACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPREQUESTHEADERDELETEACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPRESPONSEHEADERDELETEACTION`
            * :attr:`LBRuleAction.TYPE_LBVARIABLEASSIGNMENTACTION`
            * :attr:`LBRuleAction.TYPE_LBVARIABLEPERSISTENCEONACTION`
            * :attr:`LBRuleAction.TYPE_LBVARIABLEPERSISTENCELEARNACTION`
            * :attr:`LBRuleAction.TYPE_LBJWTAUTHACTION`
            * :attr:`LBRuleAction.TYPE_LBSSLMODESELECTIONACTION`
            * :attr:`LBRuleAction.TYPE_LBCONNECTIONDROPACTION`
            
             The property identifies the load balancer rule action type.
        """
        self.ssl_mode = ssl_mode
        self._type = type
        VapiStruct.__init__(self)

    @property
    def type(self):
        """
        Return the discriminator value
        """
        return self._type

LBSslModeSelectionAction._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_ssl_mode_selection_action', {
        'ssl_mode': type.OptionalType(type.StringType()),
        'type': type.StringType(),
    },
    LBSslModeSelectionAction,
    False,
    None))



class LBSslProfile(VapiStruct):
    """
    Load balancer abstract SSL profile.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        VapiStruct.__init__(self)


LBSslProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_ssl_profile', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
    },
    LBSslProfile,
    False,
    None))



class LBSslSniCondition(VapiStruct):
    """
    This condition is used to match SSL SNI in client hello. This condition is
    only supported in TRANSPORT phase. Only if virtual server is associated
    with client SSL profile, matching SNI condition in transport phase is
    available to be configured.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "LBSslSniCondition"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    MATCH_TYPE_STARTS_WITH = "STARTS_WITH"
    """


    """
    MATCH_TYPE_ENDS_WITH = "ENDS_WITH"
    """


    """
    MATCH_TYPE_EQUALS = "EQUALS"
    """


    """
    MATCH_TYPE_CONTAINS = "CONTAINS"
    """


    """
    MATCH_TYPE_REGEX = "REGEX"
    """


    """



    _canonical_to_pep_names = {
                            'case_sensitive': 'case_sensitive',
                            'match_type': 'match_type',
                            'sni': 'sni',
                            'inverse': 'inverse',
                            'type': 'type',
                            }

    def __init__(self,
                 case_sensitive=None,
                 match_type=None,
                 sni=None,
                 inverse=None,
                 type='LBSslSniCondition',
                ):
        """
        :type  case_sensitive: :class:`bool` or ``None``
        :param case_sensitive: If true, case is significant when comparing SNI value.
        :type  match_type: :class:`str` or ``None``
        :param match_type: Possible values are: 
            
            * :attr:`LBSslSniCondition.MATCH_TYPE_STARTS_WITH`
            * :attr:`LBSslSniCondition.MATCH_TYPE_ENDS_WITH`
            * :attr:`LBSslSniCondition.MATCH_TYPE_EQUALS`
            * :attr:`LBSslSniCondition.MATCH_TYPE_CONTAINS`
            * :attr:`LBSslSniCondition.MATCH_TYPE_REGEX`
            
             Match type of SNI
        :type  sni: :class:`str` or ``None``
        :param sni: The SNI(Server Name indication) in client hello message.
        :type  inverse: :class:`bool` or ``None``
        :param inverse: A flag to indicate whether reverse the match result of this
            condition
        :type  type: :class:`str`
        :param type: Possible values are: 
            
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTURICONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTHEADERCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTMETHODCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTURIARGUMENTSCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTVERSIONCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTCOOKIECONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTBODYCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPRESPONSEHEADERCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBTCPHEADERCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBIPHEADERCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBVARIABLECONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPSSLCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBSSLSNICONDITION`
            
             Type of load balancer rule condition
        """
        self.case_sensitive = case_sensitive
        self.match_type = match_type
        self.sni = sni
        self.inverse = inverse
        self._type = type
        VapiStruct.__init__(self)

    @property
    def type(self):
        """
        Return the discriminator value
        """
        return self._type

LBSslSniCondition._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_ssl_sni_condition', {
        'case_sensitive': type.OptionalType(type.BooleanType()),
        'match_type': type.OptionalType(type.StringType()),
        'sni': type.OptionalType(type.StringType()),
        'inverse': type.OptionalType(type.BooleanType()),
        'type': type.StringType(),
    },
    LBSslSniCondition,
    False,
    None))



class LBStatisticsCounter(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'bytes_in': 'bytes_in',
                            'bytes_in_rate': 'bytes_in_rate',
                            'bytes_out': 'bytes_out',
                            'bytes_out_rate': 'bytes_out_rate',
                            'current_session_rate': 'current_session_rate',
                            'current_sessions': 'current_sessions',
                            'dropped_packets_by_access_list': 'dropped_packets_by_access_list',
                            'dropped_sessions_by_lbrule_action': 'dropped_sessions_by_lbrule_action',
                            'http_request_rate': 'http_request_rate',
                            'http_requests': 'http_requests',
                            'max_sessions': 'max_sessions',
                            'packets_in': 'packets_in',
                            'packets_in_rate': 'packets_in_rate',
                            'packets_out': 'packets_out',
                            'packets_out_rate': 'packets_out_rate',
                            'source_ip_persistence_entry_size': 'source_ip_persistence_entry_size',
                            'total_sessions': 'total_sessions',
                            }

    def __init__(self,
                 bytes_in=None,
                 bytes_in_rate=None,
                 bytes_out=None,
                 bytes_out_rate=None,
                 current_session_rate=None,
                 current_sessions=None,
                 dropped_packets_by_access_list=None,
                 dropped_sessions_by_lbrule_action=None,
                 http_request_rate=None,
                 http_requests=None,
                 max_sessions=None,
                 packets_in=None,
                 packets_in_rate=None,
                 packets_out=None,
                 packets_out_rate=None,
                 source_ip_persistence_entry_size=None,
                 total_sessions=None,
                ):
        """
        :type  bytes_in: :class:`long` or ``None``
        :param bytes_in: Number of bytes in. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  bytes_in_rate: :class:`float` or ``None``
        :param bytes_in_rate: The average number of inbound bytes per second, the number is
            averaged over the last 5 one-second intervals.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  bytes_out: :class:`long` or ``None``
        :param bytes_out: Number of bytes out. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  bytes_out_rate: :class:`float` or ``None``
        :param bytes_out_rate: The average number of outbound bytes per second, the number is
            averaged over the last 5 one-second intervals.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  current_session_rate: :class:`float` or ``None``
        :param current_session_rate: The average number of current sessions per second, the number is
            averaged over the last 5 one-second intervals.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  current_sessions: :class:`long` or ``None``
        :param current_sessions: Number of current sessions. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  dropped_packets_by_access_list: :class:`long` or ``None``
        :param dropped_packets_by_access_list: The total number of dropped TCP SYN or UDP packets by access list
            control. format: int64
        :type  dropped_sessions_by_lbrule_action: :class:`long` or ``None``
        :param dropped_sessions_by_lbrule_action: The total number of dropped sessions by LB rule action. format:
            int64
        :type  http_request_rate: :class:`float` or ``None``
        :param http_request_rate: The average number of http requests per second, the number is
            averaged over the last 5 one-second intervals.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  http_requests: :class:`long` or ``None``
        :param http_requests: The total number of http requests. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  max_sessions: :class:`long` or ``None``
        :param max_sessions: Number of maximum sessions. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  packets_in: :class:`long` or ``None``
        :param packets_in: Number of packets in. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  packets_in_rate: :class:`float` or ``None``
        :param packets_in_rate: The average number of inbound packets per second, the number is
            averaged over the last 5 one-second intervals.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  packets_out: :class:`long` or ``None``
        :param packets_out: Number of packets out. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  packets_out_rate: :class:`float` or ``None``
        :param packets_out_rate: The average number of outbound packets per second, the number is
            averaged over the last 5 one-second intervals.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  source_ip_persistence_entry_size: :class:`long` or ``None``
        :param source_ip_persistence_entry_size: Number of source IP persistence entries format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  total_sessions: :class:`long` or ``None``
        :param total_sessions: Number of total sessions. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.bytes_in = bytes_in
        self.bytes_in_rate = bytes_in_rate
        self.bytes_out = bytes_out
        self.bytes_out_rate = bytes_out_rate
        self.current_session_rate = current_session_rate
        self.current_sessions = current_sessions
        self.dropped_packets_by_access_list = dropped_packets_by_access_list
        self.dropped_sessions_by_lbrule_action = dropped_sessions_by_lbrule_action
        self.http_request_rate = http_request_rate
        self.http_requests = http_requests
        self.max_sessions = max_sessions
        self.packets_in = packets_in
        self.packets_in_rate = packets_in_rate
        self.packets_out = packets_out
        self.packets_out_rate = packets_out_rate
        self.source_ip_persistence_entry_size = source_ip_persistence_entry_size
        self.total_sessions = total_sessions
        VapiStruct.__init__(self)


LBStatisticsCounter._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_statistics_counter', {
        'bytes_in': type.OptionalType(type.IntegerType()),
        'bytes_in_rate': type.OptionalType(type.DoubleType()),
        'bytes_out': type.OptionalType(type.IntegerType()),
        'bytes_out_rate': type.OptionalType(type.DoubleType()),
        'current_session_rate': type.OptionalType(type.DoubleType()),
        'current_sessions': type.OptionalType(type.IntegerType()),
        'dropped_packets_by_access_list': type.OptionalType(type.IntegerType()),
        'dropped_sessions_by_lbrule_action': type.OptionalType(type.IntegerType()),
        'http_request_rate': type.OptionalType(type.DoubleType()),
        'http_requests': type.OptionalType(type.IntegerType()),
        'max_sessions': type.OptionalType(type.IntegerType()),
        'packets_in': type.OptionalType(type.IntegerType()),
        'packets_in_rate': type.OptionalType(type.DoubleType()),
        'packets_out': type.OptionalType(type.IntegerType()),
        'packets_out_rate': type.OptionalType(type.DoubleType()),
        'source_ip_persistence_entry_size': type.OptionalType(type.IntegerType()),
        'total_sessions': type.OptionalType(type.IntegerType()),
    },
    LBStatisticsCounter,
    False,
    None))



class LBTcpHeaderCondition(VapiStruct):
    """
    This condition is used to match TCP header fields of HTTP messages.
    Currently, only the TCP source port is supported. Ports can be expressed as
    a single port number like 80, or a port range like 1024-1030.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "LBTcpHeaderCondition"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'source_port': 'source_port',
                            'inverse': 'inverse',
                            'type': 'type',
                            }

    def __init__(self,
                 source_port=None,
                 inverse=None,
                 type='LBTcpHeaderCondition',
                ):
        """
        :type  source_port: :class:`str` or ``None``
        :param source_port: TCP source port of HTTP message format: port-or-range
        :type  inverse: :class:`bool` or ``None``
        :param inverse: A flag to indicate whether reverse the match result of this
            condition
        :type  type: :class:`str`
        :param type: Possible values are: 
            
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTURICONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTHEADERCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTMETHODCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTURIARGUMENTSCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTVERSIONCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTCOOKIECONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTBODYCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPRESPONSEHEADERCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBTCPHEADERCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBIPHEADERCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBVARIABLECONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPSSLCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBSSLSNICONDITION`
            
             Type of load balancer rule condition
        """
        self.source_port = source_port
        self.inverse = inverse
        self._type = type
        VapiStruct.__init__(self)

    @property
    def type(self):
        """
        Return the discriminator value
        """
        return self._type

LBTcpHeaderCondition._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_tcp_header_condition', {
        'source_port': type.OptionalType(type.StringType()),
        'inverse': type.OptionalType(type.BooleanType()),
        'type': type.StringType(),
    },
    LBTcpHeaderCondition,
    False,
    None))



class LBTcpMonitorProfile(VapiStruct):
    """
    Active healthchecks are disabled by default and can be enabled for a server
    pool by binding a health monitor to the Group through the LBRule object.
    This represents active health monitoring over TCP. Active healthchecks are
    initiated periodically, at a configurable interval, to each member of the
    Group. Only if a healthcheck fails consecutively for a specified number of
    times (fall_count) to a member will the member status be marked DOWN. Once
    a member is DOWN, a specified number of consecutive successful healthchecks
    (rise_count) will bring the member back to UP state. After a healthcheck is
    initiated, if it does not complete within a certain period, then also the
    healthcheck is considered to be unsuccessful. Completing a healthcheck
    within timeout means establishing a connection (TCP or SSL), if applicable,
    sending the request and receiving the response, all within the configured
    timeout.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'receive': 'receive',
                            'send': 'send',
                            'fall_count': 'fall_count',
                            'interval': 'interval',
                            'monitor_port': 'monitor_port',
                            'rise_count': 'rise_count',
                            'timeout': 'timeout',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            }

    def __init__(self,
                 receive=None,
                 send=None,
                 fall_count=None,
                 interval=None,
                 monitor_port=None,
                 rise_count=None,
                 timeout=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                ):
        """
        :type  receive: :class:`str` or ``None``
        :param receive: Expected data, if specified, can be anywhere in the response and it
            has to be a string, regular expressions are not supported.
        :type  send: :class:`str` or ``None``
        :param send: If both send and receive are not specified, then just a TCP
            connection is established (3-way handshake) to validate server is
            healthy, no data is sent.
        :type  fall_count: :class:`long` or ``None``
        :param fall_count: Only if a healthcheck fails consecutively for a specified number of
            times, given with fall_count, to a member will the member status be
            marked DOWN. format: int64
        :type  interval: :class:`long` or ``None``
        :param interval: Active healthchecks are initiated periodically, at a configurable
            interval (in seconds), to each member of the Group. format: int64
        :type  monitor_port: :class:`long` or ``None``
        :param monitor_port: Typically, monitors perform healthchecks to Group members using the
            member IP address and pool_port. However, in some cases, customers
            prefer to run healthchecks against a different port than the pool
            member port which handles actual application traffic. In such
            cases, the port to run healthchecks against can be specified in the
            monitor_port value. For ICMP monitor, monitor_port is not required.
            format: int32
        :type  rise_count: :class:`long` or ``None``
        :param rise_count: Once a member is DOWN, a specified number of consecutive successful
            healthchecks specified by rise_count will bring the member back to
            UP state. format: int64
        :type  timeout: :class:`long` or ``None``
        :param timeout: Timeout specified in seconds. After a healthcheck is initiated, if
            it does not complete within a certain period, then also the
            healthcheck is considered to be unsuccessful. Completing a
            healthcheck within timeout means establishing a connection (TCP or
            SSL), if applicable, sending the request and receiving the
            response, all within the configured timeout. format: int64
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`LBMonitorProfile.RESOURCE_TYPE_LBTCPMONITORPROFILE`
            * :attr:`LBMonitorProfile.RESOURCE_TYPE_LBUDPMONITORPROFILE`
            * :attr:`LBMonitorProfile.RESOURCE_TYPE_LBICMPMONITORPROFILE`
            * :attr:`LBMonitorProfile.RESOURCE_TYPE_LBHTTPMONITORPROFILE`
            * :attr:`LBMonitorProfile.RESOURCE_TYPE_LBHTTPSMONITORPROFILE`
            * :attr:`LBMonitorProfile.RESOURCE_TYPE_LBPASSIVEMONITORPROFILE`
            
            There are two types of healthchecks: active and passive. Passive
            healthchecks depend on failures in actual client traffic (e.g. RST
            from server in response to a client connection) to detect that the
            server or the application is down. In case of active healthchecks,
            load balancer itself initiates new connections (or sends ICMP ping)
            to the servers periodically to check their health, completely
            independent of any data traffic. Currently, active health monitors
            are supported for HTTP, HTTPS, TCP, UDP and ICMP protocols.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.receive = receive
        self.send = send
        self.fall_count = fall_count
        self.interval = interval
        self.monitor_port = monitor_port
        self.rise_count = rise_count
        self.timeout = timeout
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

LBTcpMonitorProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_tcp_monitor_profile', {
        'receive': type.OptionalType(type.StringType()),
        'send': type.OptionalType(type.StringType()),
        'fall_count': type.OptionalType(type.IntegerType()),
        'interval': type.OptionalType(type.IntegerType()),
        'monitor_port': type.OptionalType(type.IntegerType()),
        'rise_count': type.OptionalType(type.IntegerType()),
        'timeout': type.OptionalType(type.IntegerType()),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
    },
    LBTcpMonitorProfile,
    False,
    None))



class LBUdpMonitorProfile(VapiStruct):
    """
    Active healthchecks are disabled by default and can be enabled for a server
    pool by binding a health monitor to the Group through the LBRule object.
    This represents active health monitoring over UDP. Active healthchecks are
    initiated periodically, at a configurable interval, to each member of the
    Group. Only if a healthcheck fails consecutively for a specified number of
    times (fall_count) to a member will the member status be marked DOWN. Once
    a member is DOWN, a specified number of consecutive successful healthchecks
    (rise_count) will bring the member back to UP state. After a healthcheck is
    initiated, if it does not complete within a certain period, then also the
    healthcheck is considered to be unsuccessful. Completing a healthcheck
    within timeout means establishing a connection (TCP or SSL), if applicable,
    sending the request and receiving the response, all within the configured
    timeout.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'receive': 'receive',
                            'send': 'send',
                            'fall_count': 'fall_count',
                            'interval': 'interval',
                            'monitor_port': 'monitor_port',
                            'rise_count': 'rise_count',
                            'timeout': 'timeout',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            }

    def __init__(self,
                 receive=None,
                 send=None,
                 fall_count=None,
                 interval=None,
                 monitor_port=None,
                 rise_count=None,
                 timeout=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                ):
        """
        :type  receive: :class:`str` or ``None``
        :param receive: Expected data, can be anywhere in the response and it has to be a
            string, regular expressions are not supported. UDP healthcheck is
            considered failed if there is no server response within the timeout
            period.
        :type  send: :class:`str` or ``None``
        :param send: The data to be sent to the monitored server.
        :type  fall_count: :class:`long` or ``None``
        :param fall_count: Only if a healthcheck fails consecutively for a specified number of
            times, given with fall_count, to a member will the member status be
            marked DOWN. format: int64
        :type  interval: :class:`long` or ``None``
        :param interval: Active healthchecks are initiated periodically, at a configurable
            interval (in seconds), to each member of the Group. format: int64
        :type  monitor_port: :class:`long` or ``None``
        :param monitor_port: Typically, monitors perform healthchecks to Group members using the
            member IP address and pool_port. However, in some cases, customers
            prefer to run healthchecks against a different port than the pool
            member port which handles actual application traffic. In such
            cases, the port to run healthchecks against can be specified in the
            monitor_port value. For ICMP monitor, monitor_port is not required.
            format: int32
        :type  rise_count: :class:`long` or ``None``
        :param rise_count: Once a member is DOWN, a specified number of consecutive successful
            healthchecks specified by rise_count will bring the member back to
            UP state. format: int64
        :type  timeout: :class:`long` or ``None``
        :param timeout: Timeout specified in seconds. After a healthcheck is initiated, if
            it does not complete within a certain period, then also the
            healthcheck is considered to be unsuccessful. Completing a
            healthcheck within timeout means establishing a connection (TCP or
            SSL), if applicable, sending the request and receiving the
            response, all within the configured timeout. format: int64
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`LBMonitorProfile.RESOURCE_TYPE_LBTCPMONITORPROFILE`
            * :attr:`LBMonitorProfile.RESOURCE_TYPE_LBUDPMONITORPROFILE`
            * :attr:`LBMonitorProfile.RESOURCE_TYPE_LBICMPMONITORPROFILE`
            * :attr:`LBMonitorProfile.RESOURCE_TYPE_LBHTTPMONITORPROFILE`
            * :attr:`LBMonitorProfile.RESOURCE_TYPE_LBHTTPSMONITORPROFILE`
            * :attr:`LBMonitorProfile.RESOURCE_TYPE_LBPASSIVEMONITORPROFILE`
            
            There are two types of healthchecks: active and passive. Passive
            healthchecks depend on failures in actual client traffic (e.g. RST
            from server in response to a client connection) to detect that the
            server or the application is down. In case of active healthchecks,
            load balancer itself initiates new connections (or sends ICMP ping)
            to the servers periodically to check their health, completely
            independent of any data traffic. Currently, active health monitors
            are supported for HTTP, HTTPS, TCP, UDP and ICMP protocols.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.receive = receive
        self.send = send
        self.fall_count = fall_count
        self.interval = interval
        self.monitor_port = monitor_port
        self.rise_count = rise_count
        self.timeout = timeout
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

LBUdpMonitorProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_udp_monitor_profile', {
        'receive': type.OptionalType(type.StringType()),
        'send': type.OptionalType(type.StringType()),
        'fall_count': type.OptionalType(type.IntegerType()),
        'interval': type.OptionalType(type.IntegerType()),
        'monitor_port': type.OptionalType(type.IntegerType()),
        'rise_count': type.OptionalType(type.IntegerType()),
        'timeout': type.OptionalType(type.IntegerType()),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
    },
    LBUdpMonitorProfile,
    False,
    None))



class LBVariableAssignmentAction(VapiStruct):
    """
    This action is used to create a new variable and assign value to it. One
    action can be used to create one variable. To create multiple variables,
    multiple actions must be defined. The variables can be used by
    LBVariableCondition, etc.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "LBVariableAssignmentAction"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'variable_name': 'variable_name',
                            'variable_value': 'variable_value',
                            'type': 'type',
                            }

    def __init__(self,
                 variable_name=None,
                 variable_value=None,
                 type='LBVariableAssignmentAction',
                ):
        """
        :type  variable_name: :class:`str` or ``None``
        :param variable_name: Name of the variable to be assigned.
        :type  variable_value: :class:`str` or ``None``
        :param variable_value: Value of variable.
        :type  type: :class:`str`
        :param type: Possible values are: 
            
            * :attr:`LBRuleAction.TYPE_LBSELECTPOOLACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPREQUESTURIREWRITEACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPREQUESTHEADERREWRITEACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPREJECTACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPREDIRECTACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPRESPONSEHEADERREWRITEACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPREQUESTHEADERDELETEACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPRESPONSEHEADERDELETEACTION`
            * :attr:`LBRuleAction.TYPE_LBVARIABLEASSIGNMENTACTION`
            * :attr:`LBRuleAction.TYPE_LBVARIABLEPERSISTENCEONACTION`
            * :attr:`LBRuleAction.TYPE_LBVARIABLEPERSISTENCELEARNACTION`
            * :attr:`LBRuleAction.TYPE_LBJWTAUTHACTION`
            * :attr:`LBRuleAction.TYPE_LBSSLMODESELECTIONACTION`
            * :attr:`LBRuleAction.TYPE_LBCONNECTIONDROPACTION`
            
             The property identifies the load balancer rule action type.
        """
        self.variable_name = variable_name
        self.variable_value = variable_value
        self._type = type
        VapiStruct.__init__(self)

    @property
    def type(self):
        """
        Return the discriminator value
        """
        return self._type

LBVariableAssignmentAction._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_variable_assignment_action', {
        'variable_name': type.OptionalType(type.StringType()),
        'variable_value': type.OptionalType(type.StringType()),
        'type': type.StringType(),
    },
    LBVariableAssignmentAction,
    False,
    None))



class LBVariableCondition(VapiStruct):
    """
    This condition is used to match variable's name and value at all phases.
    The variables could be captured from REGEX or assigned by
    LBVariableAssignmentAction or system embedded variable. Varialbe_name and
    variable_value should be matched at the same time.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "LBVariableCondition"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    MATCH_TYPE_STARTS_WITH = "STARTS_WITH"
    """


    """
    MATCH_TYPE_ENDS_WITH = "ENDS_WITH"
    """


    """
    MATCH_TYPE_EQUALS = "EQUALS"
    """


    """
    MATCH_TYPE_CONTAINS = "CONTAINS"
    """


    """
    MATCH_TYPE_REGEX = "REGEX"
    """


    """



    _canonical_to_pep_names = {
                            'case_sensitive': 'case_sensitive',
                            'match_type': 'match_type',
                            'variable_name': 'variable_name',
                            'variable_value': 'variable_value',
                            'inverse': 'inverse',
                            'type': 'type',
                            }

    def __init__(self,
                 case_sensitive=None,
                 match_type=None,
                 variable_name=None,
                 variable_value=None,
                 inverse=None,
                 type='LBVariableCondition',
                ):
        """
        :type  case_sensitive: :class:`bool` or ``None``
        :param case_sensitive: If true, case is significant when comparing variable value.
        :type  match_type: :class:`str` or ``None``
        :param match_type: Possible values are: 
            
            * :attr:`LBVariableCondition.MATCH_TYPE_STARTS_WITH`
            * :attr:`LBVariableCondition.MATCH_TYPE_ENDS_WITH`
            * :attr:`LBVariableCondition.MATCH_TYPE_EQUALS`
            * :attr:`LBVariableCondition.MATCH_TYPE_CONTAINS`
            * :attr:`LBVariableCondition.MATCH_TYPE_REGEX`
            
             Match type of variable value
        :type  variable_name: :class:`str` or ``None``
        :param variable_name: Name of the variable to be matched
        :type  variable_value: :class:`str` or ``None``
        :param variable_value: Value of variable to be matched
        :type  inverse: :class:`bool` or ``None``
        :param inverse: A flag to indicate whether reverse the match result of this
            condition
        :type  type: :class:`str`
        :param type: Possible values are: 
            
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTURICONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTHEADERCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTMETHODCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTURIARGUMENTSCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTVERSIONCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTCOOKIECONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPREQUESTBODYCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPRESPONSEHEADERCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBTCPHEADERCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBIPHEADERCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBVARIABLECONDITION`
            * :attr:`LBRuleCondition.TYPE_LBHTTPSSLCONDITION`
            * :attr:`LBRuleCondition.TYPE_LBSSLSNICONDITION`
            
             Type of load balancer rule condition
        """
        self.case_sensitive = case_sensitive
        self.match_type = match_type
        self.variable_name = variable_name
        self.variable_value = variable_value
        self.inverse = inverse
        self._type = type
        VapiStruct.__init__(self)

    @property
    def type(self):
        """
        Return the discriminator value
        """
        return self._type

LBVariableCondition._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_variable_condition', {
        'case_sensitive': type.OptionalType(type.BooleanType()),
        'match_type': type.OptionalType(type.StringType()),
        'variable_name': type.OptionalType(type.StringType()),
        'variable_value': type.OptionalType(type.StringType()),
        'inverse': type.OptionalType(type.BooleanType()),
        'type': type.StringType(),
    },
    LBVariableCondition,
    False,
    None))



class LBVariablePersistenceLearnAction(VapiStruct):
    """
    This action is performed in HTTP response rewrite phase. It is used to
    learn the value of variable from the HTTP response, and insert an entry
    into the persistence table if the entry doesn't exist.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "LBVariablePersistenceLearnAction"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'persistence_profile_path': 'persistence_profile_path',
                            'variable_hash_enabled': 'variable_hash_enabled',
                            'variable_name': 'variable_name',
                            'type': 'type',
                            }

    def __init__(self,
                 persistence_profile_path=None,
                 variable_hash_enabled=None,
                 variable_name=None,
                 type='LBVariablePersistenceLearnAction',
                ):
        """
        :type  persistence_profile_path: :class:`str` or ``None``
        :param persistence_profile_path: If the persistence profile path is not specified, a default
            persistence table is created per virtual server. Currently, only
            LBGenericPersistenceProfile is supported.
        :type  variable_hash_enabled: :class:`bool` or ``None``
        :param variable_hash_enabled: The property is used to enable a hash operation for variable value
            when composing the persistence key.
        :type  variable_name: :class:`str` or ``None``
        :param variable_name: The property is the name of variable to be learnt. It is used to
            identify which variable's value is learnt from HTTP response. The
            variable can be a built-in variable such as \"_cookie_JSESSIONID\",
            a customized variable defined in LBVariableAssignmentAction or a
            captured variable in regular expression such as \"article\". For
            the full list of built-in variables, please reference the NSX-T
            Administrator's Guide.
        :type  type: :class:`str`
        :param type: Possible values are: 
            
            * :attr:`LBRuleAction.TYPE_LBSELECTPOOLACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPREQUESTURIREWRITEACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPREQUESTHEADERREWRITEACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPREJECTACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPREDIRECTACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPRESPONSEHEADERREWRITEACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPREQUESTHEADERDELETEACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPRESPONSEHEADERDELETEACTION`
            * :attr:`LBRuleAction.TYPE_LBVARIABLEASSIGNMENTACTION`
            * :attr:`LBRuleAction.TYPE_LBVARIABLEPERSISTENCEONACTION`
            * :attr:`LBRuleAction.TYPE_LBVARIABLEPERSISTENCELEARNACTION`
            * :attr:`LBRuleAction.TYPE_LBJWTAUTHACTION`
            * :attr:`LBRuleAction.TYPE_LBSSLMODESELECTIONACTION`
            * :attr:`LBRuleAction.TYPE_LBCONNECTIONDROPACTION`
            
             The property identifies the load balancer rule action type.
        """
        self.persistence_profile_path = persistence_profile_path
        self.variable_hash_enabled = variable_hash_enabled
        self.variable_name = variable_name
        self._type = type
        VapiStruct.__init__(self)

    @property
    def type(self):
        """
        Return the discriminator value
        """
        return self._type

LBVariablePersistenceLearnAction._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_variable_persistence_learn_action', {
        'persistence_profile_path': type.OptionalType(type.StringType()),
        'variable_hash_enabled': type.OptionalType(type.BooleanType()),
        'variable_name': type.OptionalType(type.StringType()),
        'type': type.StringType(),
    },
    LBVariablePersistenceLearnAction,
    False,
    None))



class LBVariablePersistenceOnAction(VapiStruct):
    """
    This action is performed in HTTP forwarding phase. It is used to inspect
    the variable of HTTP request, and look up the persistence entry with its
    value and pool uuid as key. If the persistence entry is found, the HTTP
    request is forwarded to the recorded backend server according to the
    persistence entry. If the persistence entry is not found, a new entry is
    created in the table after backend server is selected.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "LBVariablePersistenceOnAction"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'persistence_profile_path': 'persistence_profile_path',
                            'variable_hash_enabled': 'variable_hash_enabled',
                            'variable_name': 'variable_name',
                            'type': 'type',
                            }

    def __init__(self,
                 persistence_profile_path=None,
                 variable_hash_enabled=None,
                 variable_name=None,
                 type='LBVariablePersistenceOnAction',
                ):
        """
        :type  persistence_profile_path: :class:`str` or ``None``
        :param persistence_profile_path: If the persistence profile path is not specified, a default
            persistence table is created per virtual server. Currently, only
            LBGenericPersistenceProfile is supported.
        :type  variable_hash_enabled: :class:`bool` or ``None``
        :param variable_hash_enabled: The property is used to enable a hash operation for variable value
            when composing the persistence key.
        :type  variable_name: :class:`str` or ``None``
        :param variable_name: The property is the name of variable to be used. It specifies which
            variable's value of a HTTP Request will be used in the key of
            persistence entry. The variable can be a built-in variable such as
            \"_cookie_JSESSIONID\", a customized variable defined in
            LBVariableAssignmentAction or a captured variable in regular
            expression such as \"article\". For the full list of built-in
            variables, please reference the NSX-T Administrator's Guide.
        :type  type: :class:`str`
        :param type: Possible values are: 
            
            * :attr:`LBRuleAction.TYPE_LBSELECTPOOLACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPREQUESTURIREWRITEACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPREQUESTHEADERREWRITEACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPREJECTACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPREDIRECTACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPRESPONSEHEADERREWRITEACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPREQUESTHEADERDELETEACTION`
            * :attr:`LBRuleAction.TYPE_LBHTTPRESPONSEHEADERDELETEACTION`
            * :attr:`LBRuleAction.TYPE_LBVARIABLEASSIGNMENTACTION`
            * :attr:`LBRuleAction.TYPE_LBVARIABLEPERSISTENCEONACTION`
            * :attr:`LBRuleAction.TYPE_LBVARIABLEPERSISTENCELEARNACTION`
            * :attr:`LBRuleAction.TYPE_LBJWTAUTHACTION`
            * :attr:`LBRuleAction.TYPE_LBSSLMODESELECTIONACTION`
            * :attr:`LBRuleAction.TYPE_LBCONNECTIONDROPACTION`
            
             The property identifies the load balancer rule action type.
        """
        self.persistence_profile_path = persistence_profile_path
        self.variable_hash_enabled = variable_hash_enabled
        self.variable_name = variable_name
        self._type = type
        VapiStruct.__init__(self)

    @property
    def type(self):
        """
        Return the discriminator value
        """
        return self._type

LBVariablePersistenceOnAction._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_variable_persistence_on_action', {
        'persistence_profile_path': type.OptionalType(type.StringType()),
        'variable_hash_enabled': type.OptionalType(type.BooleanType()),
        'variable_name': type.OptionalType(type.StringType()),
        'type': type.StringType(),
    },
    LBVariablePersistenceOnAction,
    False,
    None))



class LBVirtualServer(VapiStruct):
    """
    All the types of LBVirtualServer extend from this abstract class. This is
    present for extensibility.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'access_list_control': 'access_list_control',
                            'access_log_enabled': 'access_log_enabled',
                            'application_profile_path': 'application_profile_path',
                            'client_ssl_profile_binding': 'client_ssl_profile_binding',
                            'default_pool_member_ports': 'default_pool_member_ports',
                            'enabled': 'enabled',
                            'ip_address': 'ip_address',
                            'lb_persistence_profile_path': 'lb_persistence_profile_path',
                            'lb_service_path': 'lb_service_path',
                            'log_significant_event_only': 'log_significant_event_only',
                            'max_concurrent_connections': 'max_concurrent_connections',
                            'max_new_connection_rate': 'max_new_connection_rate',
                            'pool_path': 'pool_path',
                            'ports': 'ports',
                            'rules': 'rules',
                            'server_ssl_profile_binding': 'server_ssl_profile_binding',
                            'sorry_pool_path': 'sorry_pool_path',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 access_list_control=None,
                 access_log_enabled=None,
                 application_profile_path=None,
                 client_ssl_profile_binding=None,
                 default_pool_member_ports=None,
                 enabled=None,
                 ip_address=None,
                 lb_persistence_profile_path=None,
                 lb_service_path=None,
                 log_significant_event_only=None,
                 max_concurrent_connections=None,
                 max_new_connection_rate=None,
                 pool_path=None,
                 ports=None,
                 rules=None,
                 server_ssl_profile_binding=None,
                 sorry_pool_path=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  access_list_control: :class:`LBAccessListControl` or ``None``
        :param access_list_control: Specifies the access list control to define how to filter the
            connections from clients.
        :type  access_log_enabled: :class:`bool` or ``None``
        :param access_log_enabled: If access log is enabled, all HTTP requests sent to L7 virtual
            server are logged to the access log file. Both successful returns
            information responses(1xx), successful responses(2xx), redirection
            messages(3xx) and unsuccessful requests, backend server returns 4xx
            or 5xx, are logged to access log, if enabled. All L4 virtual server
            connections are also logged to the access log if enabled. The
            non-significant events such as successful requests are not logged
            if log_significant_event_only is set to true.
        :type  application_profile_path: :class:`str` or ``None``
        :param application_profile_path: The application profile defines the application protocol
            characteristics. It is used to influence how load balancing is
            performed. Currently, LBFastTCPProfile, LBFastUDPProfile and
            LBHttpProfile, etc are supported.
        :type  client_ssl_profile_binding: :class:`LBClientSslProfileBinding` or ``None``
        :param client_ssl_profile_binding: The setting is used when load balancer acts as an SSL server and
            terminating the client SSL connection
        :type  default_pool_member_ports: :class:`list` of :class:`str` or ``None``
        :param default_pool_member_ports: Default pool member ports when member port is not defined. format:
            port-or-range
        :type  enabled: :class:`bool` or ``None``
        :param enabled: Flag to enable the load balancer virtual server.
        :type  ip_address: :class:`str` or ``None``
        :param ip_address: Configures the IP address of the LBVirtualServer where it receives
            all client connections and distributes them among the backend
            servers. format: ip
        :type  lb_persistence_profile_path: :class:`str` or ``None``
        :param lb_persistence_profile_path: Path to optional object that enables persistence on a virtual
            server allowing related client connections to be sent to the same
            backend server. Persistence is disabled by default.
        :type  lb_service_path: :class:`str` or ``None``
        :param lb_service_path: virtual servers can be associated to LBService(which is similar to
            physical/virtual load balancer), LB virtual servers, pools and
            other entities could be defined independently, the LBService
            identifier list here would be used to maintain the relationship of
            LBService and other LB entities.
        :type  log_significant_event_only: :class:`bool` or ``None``
        :param log_significant_event_only: The property log_significant_event_only can take effect only when
            access_log_enabled is true. If log_significant_event_only is true,
            significant events are logged in access log. For L4 virtual server,
            significant event means unsuccessful(error or dropped) TCP/UDP
            connections. For L7 virtual server, significant event means
            unsuccessful connections or HTTP/HTTPS requests which have error
            response code(e.g. 4xx, 5xx).
        :type  max_concurrent_connections: :class:`long` or ``None``
        :param max_concurrent_connections: To ensure one virtual server does not over consume resources,
            affecting other applications hosted on the same LBS, connections to
            a virtual server can be capped. If it is not specified, it means
            that connections are unlimited. format: int64
        :type  max_new_connection_rate: :class:`long` or ``None``
        :param max_new_connection_rate: To ensure one virtual server does not over consume resources,
            connections to a member can be rate limited. If it is not
            specified, it means that connection rate is unlimited. format:
            int64
        :type  pool_path: :class:`str` or ``None``
        :param pool_path: The server pool(LBPool) contains backend servers. Server pool
            consists of one or more servers, also referred to as pool members,
            that are similarly configured and are running the same application.
        :type  ports: :class:`list` of :class:`str` or ``None``
        :param ports: Ports contains a list of at least one port or port range such as
            \"80\", \"1234-1236\". Each port element in the list should be a
            single port or a single port range. format: port-or-range
        :type  rules: :class:`list` of :class:`LBRule` or ``None``
        :param rules: Load balancer rules allow customization of load balancing behavior
            using match/action rules. Currently, load balancer rules are
            supported for only layer 7 virtual servers with LBHttpProfile.
        :type  server_ssl_profile_binding: :class:`LBServerSslProfileBinding` or ``None``
        :param server_ssl_profile_binding: The setting is used when load balancer acts as an SSL client and
            establishing a connection to the backend server.
        :type  sorry_pool_path: :class:`str` or ``None``
        :param sorry_pool_path: When load balancer can not select a backend server to serve the
            request in default pool or pool in rules, the request would be
            served by sorry server pool.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.access_list_control = access_list_control
        self.access_log_enabled = access_log_enabled
        self.application_profile_path = application_profile_path
        self.client_ssl_profile_binding = client_ssl_profile_binding
        self.default_pool_member_ports = default_pool_member_ports
        self.enabled = enabled
        self.ip_address = ip_address
        self.lb_persistence_profile_path = lb_persistence_profile_path
        self.lb_service_path = lb_service_path
        self.log_significant_event_only = log_significant_event_only
        self.max_concurrent_connections = max_concurrent_connections
        self.max_new_connection_rate = max_new_connection_rate
        self.pool_path = pool_path
        self.ports = ports
        self.rules = rules
        self.server_ssl_profile_binding = server_ssl_profile_binding
        self.sorry_pool_path = sorry_pool_path
        VapiStruct.__init__(self)


LBVirtualServer._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_virtual_server', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'access_list_control': type.OptionalType(type.ReferenceType(__name__, 'LBAccessListControl')),
        'access_log_enabled': type.OptionalType(type.BooleanType()),
        'application_profile_path': type.OptionalType(type.StringType()),
        'client_ssl_profile_binding': type.OptionalType(type.ReferenceType(__name__, 'LBClientSslProfileBinding')),
        'default_pool_member_ports': type.OptionalType(type.ListType(type.StringType())),
        'enabled': type.OptionalType(type.BooleanType()),
        'ip_address': type.OptionalType(type.StringType()),
        'lb_persistence_profile_path': type.OptionalType(type.StringType()),
        'lb_service_path': type.OptionalType(type.StringType()),
        'log_significant_event_only': type.OptionalType(type.BooleanType()),
        'max_concurrent_connections': type.OptionalType(type.IntegerType()),
        'max_new_connection_rate': type.OptionalType(type.IntegerType()),
        'pool_path': type.OptionalType(type.StringType()),
        'ports': type.OptionalType(type.ListType(type.StringType())),
        'rules': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'LBRule'))),
        'server_ssl_profile_binding': type.OptionalType(type.ReferenceType(__name__, 'LBServerSslProfileBinding')),
        'sorry_pool_path': type.OptionalType(type.StringType()),
    },
    LBVirtualServer,
    False,
    None))



class LBVirtualServerListResult(VapiStruct):
    """
    Paged Collection of LBVirtualServers

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`LBVirtualServer` or ``None``
        :param results: LBVirtualServer list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


LBVirtualServerListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_virtual_server_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'LBVirtualServer'))),
    },
    LBVirtualServerListResult,
    False,
    None))



class LBVirtualServerStatistics(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'last_update_timestamp': 'last_update_timestamp',
                            'statistics': 'statistics',
                            'virtual_server_path': 'virtual_server_path',
                            'alarm': 'alarm',
                            'enforcement_point_path': 'enforcement_point_path',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 last_update_timestamp=None,
                 statistics=None,
                 virtual_server_path=None,
                 alarm=None,
                 enforcement_point_path=None,
                 resource_type=None,
                ):
        """
        :type  last_update_timestamp: :class:`long` or ``None``
        :param last_update_timestamp: Timestamp when the data was last updated. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  statistics: :class:`LBStatisticsCounter` or ``None``
        :param statistics: Virtual server statistics counter.
        :type  virtual_server_path: :class:`str` or ``None``
        :param virtual_server_path: load balancer virtual server object path.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  alarm: :class:`PolicyRuntimeAlarm` or ``None``
        :param alarm: Alarm information details.
        :type  enforcement_point_path: :class:`str` or ``None``
        :param enforcement_point_path: Policy Path referencing the enforcement point where the info is
            fetched.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  resource_type: :class:`str`
        :param resource_type: 
        """
        self.last_update_timestamp = last_update_timestamp
        self.statistics = statistics
        self.virtual_server_path = virtual_server_path
        self.alarm = alarm
        self.enforcement_point_path = enforcement_point_path
        self._resource_type = resource_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

LBVirtualServerStatistics._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_virtual_server_statistics', {
        'last_update_timestamp': type.OptionalType(type.IntegerType()),
        'statistics': type.OptionalType(type.ReferenceType(__name__, 'LBStatisticsCounter')),
        'virtual_server_path': type.OptionalType(type.StringType()),
        'alarm': type.OptionalType(type.ReferenceType(__name__, 'PolicyRuntimeAlarm')),
        'enforcement_point_path': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
    },
    LBVirtualServerStatistics,
    False,
    None))



class LBVirtualServerStatisticsPerEP(VapiStruct):
    """
    LBVirtualServerStatistics on specific Enforcement Point

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "LBVirtualServerStatisticsPerEP"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'alarm': 'alarm',
                            'enforcement_point_path': 'enforcement_point_path',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 alarm=None,
                 enforcement_point_path=None,
                 resource_type='LBVirtualServerStatisticsPerEP',
                ):
        """
        :type  alarm: :class:`PolicyRuntimeAlarm` or ``None``
        :param alarm: Alarm information details.
        :type  enforcement_point_path: :class:`str` or ``None``
        :param enforcement_point_path: Policy Path referencing the enforcement point where the info is
            fetched.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  resource_type: :class:`str`
        :param resource_type: 
        """
        self.alarm = alarm
        self.enforcement_point_path = enforcement_point_path
        self._resource_type = resource_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

LBVirtualServerStatisticsPerEP._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_virtual_server_statistics_per_EP', {
        'alarm': type.OptionalType(type.ReferenceType(__name__, 'PolicyRuntimeAlarm')),
        'enforcement_point_path': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
    },
    LBVirtualServerStatisticsPerEP,
    False,
    None))



class LBVirtualServerStatus(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "LBVirtualServerStatus"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    STATUS_UP = "UP"
    """


    """
    STATUS_PARTIALLY_UP = "PARTIALLY_UP"
    """


    """
    STATUS_PRIMARY_DOWN = "PRIMARY_DOWN"
    """


    """
    STATUS_DOWN = "DOWN"
    """


    """
    STATUS_DETACHED = "DETACHED"
    """


    """
    STATUS_DISABLED = "DISABLED"
    """


    """
    STATUS_UNKNOWN = "UNKNOWN"
    """


    """



    _canonical_to_pep_names = {
                            'last_update_timestamp': 'last_update_timestamp',
                            'status': 'status',
                            'virtual_server_path': 'virtual_server_path',
                            'alarm': 'alarm',
                            'enforcement_point_path': 'enforcement_point_path',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 last_update_timestamp=None,
                 status=None,
                 virtual_server_path=None,
                 alarm=None,
                 enforcement_point_path=None,
                 resource_type='LBVirtualServerStatus',
                ):
        """
        :type  last_update_timestamp: :class:`long` or ``None``
        :param last_update_timestamp: Timestamp when the data was last updated. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  status: :class:`str` or ``None``
        :param status: Possible values are: 
            
            * :attr:`LBVirtualServerStatus.STATUS_UP`
            * :attr:`LBVirtualServerStatus.STATUS_PARTIALLY_UP`
            * :attr:`LBVirtualServerStatus.STATUS_PRIMARY_DOWN`
            * :attr:`LBVirtualServerStatus.STATUS_DOWN`
            * :attr:`LBVirtualServerStatus.STATUS_DETACHED`
            * :attr:`LBVirtualServerStatus.STATUS_DISABLED`
            * :attr:`LBVirtualServerStatus.STATUS_UNKNOWN`
            
            UP means that all primary members in default pool are in UP status.
            For L7 virtual server, if there is no default pool, the virtual
            server would be treated as UP. PARTIALLY_UP means that some(not
            all) primary members in default pool are in UP status. The size of
            these active primary members should be larger than or equal to the
            certain number(min_active_members) which is defined in LBPool. When
            there are no backup members which are in the UP status, the
            number(min_active_members) would be ignored. PRIMARY_DOWN means
            that less than certain(min_active_members) primary members in
            default pool are in UP status but backup members are in UP status,
            the connections would be dispatched to backup members. DOWN means
            that all primary and backup members are in DOWN status. DETACHED
            means that the virtual server is not bound to any service. DISABLED
            means that the admin state of the virtual server is disabled.
            UNKOWN means that no status reported from transport-nodes. The
            associated load balancer service may be working(or not working).
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  virtual_server_path: :class:`str` or ``None``
        :param virtual_server_path: load balancer virtual server object path.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  alarm: :class:`PolicyRuntimeAlarm` or ``None``
        :param alarm: Alarm information details.
        :type  enforcement_point_path: :class:`str` or ``None``
        :param enforcement_point_path: Policy Path referencing the enforcement point where the info is
            fetched.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  resource_type: :class:`str`
        :param resource_type: 
        """
        self.last_update_timestamp = last_update_timestamp
        self.status = status
        self.virtual_server_path = virtual_server_path
        self.alarm = alarm
        self.enforcement_point_path = enforcement_point_path
        self._resource_type = resource_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

LBVirtualServerStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_virtual_server_status', {
        'last_update_timestamp': type.OptionalType(type.IntegerType()),
        'status': type.OptionalType(type.StringType()),
        'virtual_server_path': type.OptionalType(type.StringType()),
        'alarm': type.OptionalType(type.ReferenceType(__name__, 'PolicyRuntimeAlarm')),
        'enforcement_point_path': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
    },
    LBVirtualServerStatus,
    False,
    None))



class LBVirtualServerStatusPerEP(VapiStruct):
    """
    LBVirtualServerStatus on specific Enforcement Point

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "LBVirtualServerStatusPerEP"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'alarm': 'alarm',
                            'enforcement_point_path': 'enforcement_point_path',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 alarm=None,
                 enforcement_point_path=None,
                 resource_type='LBVirtualServerStatusPerEP',
                ):
        """
        :type  alarm: :class:`PolicyRuntimeAlarm` or ``None``
        :param alarm: Alarm information details.
        :type  enforcement_point_path: :class:`str` or ``None``
        :param enforcement_point_path: Policy Path referencing the enforcement point where the info is
            fetched.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  resource_type: :class:`str`
        :param resource_type: 
        """
        self.alarm = alarm
        self.enforcement_point_path = enforcement_point_path
        self._resource_type = resource_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

LBVirtualServerStatusPerEP._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.LB_virtual_server_status_per_EP', {
        'alarm': type.OptionalType(type.ReferenceType(__name__, 'PolicyRuntimeAlarm')),
        'enforcement_point_path': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
    },
    LBVirtualServerStatusPerEP,
    False,
    None))



class Label(VapiStruct):
    """
    Label that will be displayed for a UI element.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'condition': 'condition',
                            'hover': 'hover',
                            'icons': 'icons',
                            'navigation': 'navigation',
                            'text': 'text',
                            }

    def __init__(self,
                 condition=None,
                 hover=None,
                 icons=None,
                 navigation=None,
                 text=None,
                ):
        """
        :type  condition: :class:`str` or ``None``
        :param condition: If the condition is met then the label will be applied. Examples of
            expression syntax are provided under example_request section of
            CreateWidgetConfiguration API.
        :type  hover: :class:`bool` or ``None``
        :param hover: If true, displays the label only on hover
        :type  icons: :class:`list` of :class:`Icon` or ``None``
        :param icons: Icons to be applied at dashboard for the label
        :type  navigation: :class:`str` or ``None``
        :param navigation: Hyperlink of the specified UI page that provides details.
        :type  text: :class:`str` or ``None``
        :param text: Text to be displayed at the label.
        """
        self.condition = condition
        self.hover = hover
        self.icons = icons
        self.navigation = navigation
        self.text = text
        VapiStruct.__init__(self)


Label._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.label', {
        'condition': type.OptionalType(type.StringType()),
        'hover': type.OptionalType(type.BooleanType()),
        'icons': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Icon'))),
        'navigation': type.OptionalType(type.StringType()),
        'text': type.OptionalType(type.StringType()),
    },
    Label,
    False,
    None))



class LabelValueConfiguration(VapiStruct):
    """
    Represents a Label-Value widget configuration

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "LabelValueConfiguration"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    SUB_TYPE_ALIGNED = "VERTICALLY_ALIGNED"
    """


    """



    _canonical_to_pep_names = {
                            'layout': 'layout',
                            'navigation': 'navigation',
                            'properties': 'properties',
                            'sub_type': 'sub_type',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'datasources': 'datasources',
                            'default_filter_value': 'default_filter_value',
                            'drilldown_id': 'drilldown_id',
                            'filter': 'filter',
                            'filter_value_required': 'filter_value_required',
                            'footer': 'footer',
                            'icons': 'icons',
                            'is_drilldown': 'is_drilldown',
                            'legend': 'legend',
                            'shared': 'shared',
                            'span': 'span',
                            'weight': 'weight',
                            }

    def __init__(self,
                 layout=None,
                 navigation=None,
                 properties=None,
                 sub_type=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='LabelValueConfiguration',
                 tags=None,
                 datasources=None,
                 default_filter_value=None,
                 drilldown_id=None,
                 filter=None,
                 filter_value_required=None,
                 footer=None,
                 icons=None,
                 is_drilldown=None,
                 legend=None,
                 shared=None,
                 span=None,
                 weight=None,
                ):
        """
        :type  layout: :class:`Layout` or ``None``
        :param layout: Layout of properties can be vertical or grid. If layout is not
            specified a default vertical layout is applied.
        :type  navigation: :class:`str` or ``None``
        :param navigation: Hyperlink of the specified UI page that provides details.
        :type  properties: :class:`list` of :class:`PropertyItem` or ``None``
        :param properties: An array of label-value properties.
        :type  sub_type: :class:`str` or ``None``
        :param sub_type: Possible values are: 
            
            * :attr:`LabelValueConfiguration.SUB_TYPE_ALIGNED`
            
            A sub-type of LabelValueConfiguration. If sub-type is not specified
            the parent type is rendered. For VERTICALLY_ALIGNED sub_type, the
            value is placed below the label.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Title of the widget. If display_name is omitted, the widget will be
            shown without a title.
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`WidgetConfiguration.RESOURCE_TYPE_LABELVALUECONFIGURATION`
            * :attr:`WidgetConfiguration.RESOURCE_TYPE_DONUTCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_MULTIWIDGETCONFIGURATION`
            * :attr:`WidgetConfiguration.RESOURCE_TYPE_CONTAINERCONFIGURATION`
            * :attr:`WidgetConfiguration.RESOURCE_TYPE_STATSCONFIGURATION`
            * :attr:`WidgetConfiguration.RESOURCE_TYPE_GRIDCONFIGURATION`
            * :attr:`WidgetConfiguration.RESOURCE_TYPE_GRAPHCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_CUSTOMWIDGETCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_DROPDOWNFILTERWIDGETCONFIGURATION`
            
            Supported visualization types are LabelValueConfiguration,
            DonutConfiguration, GridConfiguration, StatsConfiguration,
            MultiWidgetConfiguration, GraphConfiguration,
            ContainerConfiguration, CustomWidgetConfiguration and
            DropdownFilterWidgetConfiguration.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  datasources: :class:`list` of :class:`Datasource` or ``None``
        :param datasources: The 'datasources' represent the sources from which data will be
            fetched. Currently, only NSX-API is supported as a 'default'
            datasource. An example of specifying 'default' datasource along
            with the urls to fetch data from is given at 'example_request'
            section of 'CreateWidgetConfiguration' API.
        :type  default_filter_value: :class:`list` of :class:`DefaultFilterValue` or ``None``
        :param default_filter_value: Default filter values to be passed to datasources. This will be
            used when the report is requested without filter values.
        :type  drilldown_id: :class:`str` or ``None``
        :param drilldown_id: Id of drilldown widget, if any. Id should be a valid id of an
            existing widget. A widget is considered as drilldown widget when it
            is associated with any other widget and provides more detailed
            information about any data item from the parent widget.
        :type  filter: :class:`str` or ``None``
        :param filter: Id of filter widget for subscription, if any. Id should be a valid
            id of an existing filter widget. Filter widget should be from the
            same view. Datasource URLs should have placeholder values equal to
            filter alias to accept the filter value on filter change.
        :type  filter_value_required: :class:`bool` or ``None``
        :param filter_value_required: Flag to indicate that widget will continue to work without filter
            value. If this flag is set to false then default_filter_value is
            manadatory.
        :type  footer: :class:`Footer` or ``None``
        :param footer: 
        :type  icons: :class:`list` of :class:`Icon` or ``None``
        :param icons: Icons to be applied at dashboard for widgets and UI elements.
        :type  is_drilldown: :class:`bool` or ``None``
        :param is_drilldown: Set to true if this widget should be used as a drilldown.
        :type  legend: :class:`Legend` or ``None``
        :param legend: Legend to be displayed. If legend is not needed, do not include it.
        :type  shared: :class:`bool` or ``None``
        :param shared: Please use the property 'shared' of View instead of this. The
            widgets of a shared view are visible to other users.
        :type  span: :class:`long` or ``None``
        :param span: Represents the horizontal span of the widget / container. format:
            int32
        :type  weight: :class:`long` or ``None``
        :param weight: Specify relavite weight in WidgetItem for placement in a view.
            Please see WidgetItem for details. format: int32
        """
        self.layout = layout
        self.navigation = navigation
        self.properties = properties
        self.sub_type = sub_type
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.datasources = datasources
        self.default_filter_value = default_filter_value
        self.drilldown_id = drilldown_id
        self.filter = filter
        self.filter_value_required = filter_value_required
        self.footer = footer
        self.icons = icons
        self.is_drilldown = is_drilldown
        self.legend = legend
        self.shared = shared
        self.span = span
        self.weight = weight
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

LabelValueConfiguration._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.label_value_configuration', {
        'layout': type.OptionalType(type.ReferenceType(__name__, 'Layout')),
        'navigation': type.OptionalType(type.StringType()),
        'properties': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PropertyItem'))),
        'sub_type': type.OptionalType(type.StringType()),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'datasources': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Datasource'))),
        'default_filter_value': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'DefaultFilterValue'))),
        'drilldown_id': type.OptionalType(type.StringType()),
        'filter': type.OptionalType(type.StringType()),
        'filter_value_required': type.OptionalType(type.BooleanType()),
        'footer': type.OptionalType(type.ReferenceType(__name__, 'Footer')),
        'icons': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Icon'))),
        'is_drilldown': type.OptionalType(type.BooleanType()),
        'legend': type.OptionalType(type.ReferenceType(__name__, 'Legend')),
        'shared': type.OptionalType(type.BooleanType()),
        'span': type.OptionalType(type.IntegerType()),
        'weight': type.OptionalType(type.IntegerType()),
    },
    LabelValueConfiguration,
    False,
    None))



class LacpGroupConfigInfo(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    MODE_ACTIVE = "ACTIVE"
    """


    """
    MODE_PASSIVE = "PASSIVE"
    """


    """



    _canonical_to_pep_names = {
                            'key': 'key',
                            'load_balance_algorithm': 'load_balance_algorithm',
                            'mode': 'mode',
                            'name': 'name',
                            'uplink_names': 'uplink_names',
                            'uplink_num': 'uplink_num',
                            'uplink_port_keys': 'uplink_port_keys',
                            }

    def __init__(self,
                 key=None,
                 load_balance_algorithm=None,
                 mode=None,
                 name=None,
                 uplink_names=None,
                 uplink_num=None,
                 uplink_port_keys=None,
                ):
        """
        :type  key: :class:`str` or ``None``
        :param key: The key represents the identifier for the group that is unique
            across VC.
        :type  load_balance_algorithm: :class:`str` or ``None``
        :param load_balance_algorithm: Load balance algorithm used in LACP group. The possible values are
            dictated by the values available in VC. Please refer
            VMwareDvsLacpLoadBalanceAlgorithm documentation for a full list of
            values. A few examples are srcDestIp where source and destination
            IP are considered, srcIp where only source IP is considered.
        :type  mode: :class:`str` or ``None``
        :param mode: Possible values are: 
            
            * :attr:`LacpGroupConfigInfo.MODE_ACTIVE`
            * :attr:`LacpGroupConfigInfo.MODE_PASSIVE`
            
            The mode of LACP can be ACTIVE or PASSIVE. If the mode is ACTIVE,
            LACP is enabled unconditionally. If the mode is PASSIVE, LACP is
            enabled only if LACP device is detected.
        :type  name: :class:`str` or ``None``
        :param name: The display name of the LACP group.
        :type  uplink_names: :class:`list` of :class:`str` or ``None``
        :param uplink_names: Names for the uplink ports in the group.
        :type  uplink_num: :class:`long` or ``None``
        :param uplink_num: The number of uplink ports format: int64
        :type  uplink_port_keys: :class:`list` of :class:`str` or ``None``
        :param uplink_port_keys: Keys for the uplink ports in the group. Each uplink port is
            assigned a key that is unique across VC.
        """
        self.key = key
        self.load_balance_algorithm = load_balance_algorithm
        self.mode = mode
        self.name = name
        self.uplink_names = uplink_names
        self.uplink_num = uplink_num
        self.uplink_port_keys = uplink_port_keys
        VapiStruct.__init__(self)


LacpGroupConfigInfo._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.lacp_group_config_info', {
        'key': type.OptionalType(type.StringType()),
        'load_balance_algorithm': type.OptionalType(type.StringType()),
        'mode': type.OptionalType(type.StringType()),
        'name': type.OptionalType(type.StringType()),
        'uplink_names': type.OptionalType(type.ListType(type.StringType())),
        'uplink_num': type.OptionalType(type.IntegerType()),
        'uplink_port_keys': type.OptionalType(type.ListType(type.StringType())),
    },
    LacpGroupConfigInfo,
    False,
    None))



class Layout(VapiStruct):
    """
    Represents layout of a container or widget

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    TYPE_HORIZONTAL = "HORIZONTAL"
    """


    """
    TYPE_VERTICAL = "VERTICAL"
    """


    """
    TYPE_GRID = "GRID"
    """


    """



    _canonical_to_pep_names = {
                            'properties': 'properties',
                            'type': 'type',
                            }

    def __init__(self,
                 properties=None,
                 type=None,
                ):
        """
        :type  properties: :class:`LayoutProperties` or ``None``
        :param properties: 
        :type  type: :class:`str` or ``None``
        :param type: Possible values are: 
            
            * :attr:`Layout.TYPE_HORIZONTAL`
            * :attr:`Layout.TYPE_VERTICAL`
            * :attr:`Layout.TYPE_GRID`
            
            Describes layout of a container or widget. Layout describes how
            individual widgets are placed inside the container. For example, if
            HORIZONTAL is chosen widgets are placed side by side inside the
            container. If VERTICAL is chosen then widgets are placed one below
            the other. If GRID is chosen then the container or widget display
            area is divided into a grid of m rows and n columns, as specified
            in the properties, and the widgets are placed inside the grid.
        """
        self.properties = properties
        self.type = type
        VapiStruct.__init__(self)


Layout._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.layout', {
        'properties': type.OptionalType(type.ReferenceType(__name__, 'LayoutProperties')),
        'type': type.OptionalType(type.StringType()),
    },
    Layout,
    False,
    None))



class LayoutProperties(VapiStruct):
    """
    Properties of the layout of a container or widget

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'num_columns': 'num_columns',
                            'num_rows': 'num_rows',
                            }

    def __init__(self,
                 num_columns=None,
                 num_rows=None,
                ):
        """
        :type  num_columns: :class:`long` or ``None``
        :param num_columns: Describes the number of columns of grid layout of a container or
            widget. This property is applicable for grid layout only. format:
            int32
        :type  num_rows: :class:`long` or ``None``
        :param num_rows: Describes the number of rows of grid layout of a container or
            widget. This property is applicable for grid layout only. format:
            int32
        """
        self.num_columns = num_columns
        self.num_rows = num_rows
        VapiStruct.__init__(self)


LayoutProperties._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.layout_properties', {
        'num_columns': type.OptionalType(type.IntegerType()),
        'num_rows': type.OptionalType(type.IntegerType()),
    },
    LayoutProperties,
    False,
    None))



class LbHttpRequestHeader(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'header_name': 'header_name',
                            'header_value': 'header_value',
                            }

    def __init__(self,
                 header_name=None,
                 header_value=None,
                ):
        """
        :type  header_name: :class:`str` or ``None``
        :param header_name: Name of HTTP request header
        :type  header_value: :class:`str` or ``None``
        :param header_value: Value of HTTP request header
        """
        self.header_name = header_name
        self.header_value = header_value
        VapiStruct.__init__(self)


LbHttpRequestHeader._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.lb_http_request_header', {
        'header_name': type.OptionalType(type.StringType()),
        'header_value': type.OptionalType(type.StringType()),
    },
    LbHttpRequestHeader,
    False,
    None))



class LbSslCipherAndProtocolListResult(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'ciphers': 'ciphers',
                            'protocols': 'protocols',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 ciphers=None,
                 protocols=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  ciphers: :class:`list` of :class:`LbSslCipherInfo` or ``None``
        :param ciphers: List of SSL ciphers
        :type  protocols: :class:`list` of :class:`LbSslProtocolInfo` or ``None``
        :param protocols: List of SSL protocols
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.ciphers = ciphers
        self.protocols = protocols
        VapiStruct.__init__(self)


LbSslCipherAndProtocolListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.lb_ssl_cipher_and_protocol_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'ciphers': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'LbSslCipherInfo'))),
        'protocols': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'LbSslProtocolInfo'))),
    },
    LbSslCipherAndProtocolListResult,
    False,
    None))



class LbSslCipherInfo(VapiStruct):
    """
    SSL cipher

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    CIPHER_ECDHE_RSA_WITH_AES_128_GCM_SHA256 = "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"
    """


    """
    CIPHER_ECDHE_RSA_WITH_AES_256_GCM_SHA384 = "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384"
    """


    """
    CIPHER_ECDHE_RSA_WITH_AES_256_CBC_SHA = "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA"
    """


    """
    CIPHER_ECDHE_ECDSA_WITH_AES_256_CBC_SHA = "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA"
    """


    """
    CIPHER_ECDH_ECDSA_WITH_AES_256_CBC_SHA = "TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA"
    """


    """
    CIPHER_ECDH_RSA_WITH_AES_256_CBC_SHA = "TLS_ECDH_RSA_WITH_AES_256_CBC_SHA"
    """


    """
    CIPHER_RSA_WITH_AES_256_CBC_SHA = "TLS_RSA_WITH_AES_256_CBC_SHA"
    """


    """
    CIPHER_RSA_WITH_AES_128_CBC_SHA = "TLS_RSA_WITH_AES_128_CBC_SHA"
    """


    """
    CIPHER_RSA_WITH_3DES_EDE_CBC_SHA = "TLS_RSA_WITH_3DES_EDE_CBC_SHA"
    """


    """
    CIPHER_ECDHE_RSA_WITH_AES_128_CBC_SHA = "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA"
    """


    """
    CIPHER_ECDHE_RSA_WITH_AES_128_CBC_SHA256 = "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256"
    """


    """
    CIPHER_ECDHE_RSA_WITH_AES_256_CBC_SHA384 = "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384"
    """


    """
    CIPHER_RSA_WITH_AES_128_CBC_SHA256 = "TLS_RSA_WITH_AES_128_CBC_SHA256"
    """


    """
    CIPHER_RSA_WITH_AES_128_GCM_SHA256 = "TLS_RSA_WITH_AES_128_GCM_SHA256"
    """


    """
    CIPHER_RSA_WITH_AES_256_CBC_SHA256 = "TLS_RSA_WITH_AES_256_CBC_SHA256"
    """


    """
    CIPHER_RSA_WITH_AES_256_GCM_SHA384 = "TLS_RSA_WITH_AES_256_GCM_SHA384"
    """


    """
    CIPHER_ECDHE_ECDSA_WITH_AES_128_CBC_SHA = "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA"
    """


    """
    CIPHER_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 = "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256"
    """


    """
    CIPHER_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 = "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256"
    """


    """
    CIPHER_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 = "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384"
    """


    """
    CIPHER_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 = "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384"
    """


    """
    CIPHER_ECDH_ECDSA_WITH_AES_128_CBC_SHA = "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA"
    """


    """
    CIPHER_ECDH_ECDSA_WITH_AES_128_CBC_SHA256 = "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256"
    """


    """
    CIPHER_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 = "TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256"
    """


    """
    CIPHER_ECDH_ECDSA_WITH_AES_256_CBC_SHA384 = "TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384"
    """


    """
    CIPHER_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 = "TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384"
    """


    """
    CIPHER_ECDH_RSA_WITH_AES_128_CBC_SHA = "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA"
    """


    """
    CIPHER_ECDH_RSA_WITH_AES_128_CBC_SHA256 = "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256"
    """


    """
    CIPHER_ECDH_RSA_WITH_AES_128_GCM_SHA256 = "TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256"
    """


    """
    CIPHER_ECDH_RSA_WITH_AES_256_CBC_SHA384 = "TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384"
    """


    """
    CIPHER_ECDH_RSA_WITH_AES_256_GCM_SHA384 = "TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384"
    """


    """
    CIPHER_GROUP_LABELS_BALANCED = "BALANCED"
    """


    """
    CIPHER_GROUP_LABELS_HIGH_SECURITY = "HIGH_SECURITY"
    """


    """
    CIPHER_GROUP_LABELS_HIGH_COMPATIBILITY = "HIGH_COMPATIBILITY"
    """


    """
    CIPHER_GROUP_LABELS_CUSTOM = "CUSTOM"
    """


    """



    _canonical_to_pep_names = {
                            'cipher': 'cipher',
                            'cipher_group_labels': 'cipher_group_labels',
                            'is_default': 'is_default',
                            'is_secure': 'is_secure',
                            }

    def __init__(self,
                 cipher=None,
                 cipher_group_labels=None,
                 is_default=None,
                 is_secure=None,
                ):
        """
        :type  cipher: :class:`str` or ``None``
        :param cipher: Possible values are: 
            
            * :attr:`LbSslCipherInfo.CIPHER_ECDHE_RSA_WITH_AES_128_GCM_SHA256`
            * :attr:`LbSslCipherInfo.CIPHER_ECDHE_RSA_WITH_AES_256_GCM_SHA384`
            * :attr:`LbSslCipherInfo.CIPHER_ECDHE_RSA_WITH_AES_256_CBC_SHA`
            * :attr:`LbSslCipherInfo.CIPHER_ECDHE_ECDSA_WITH_AES_256_CBC_SHA`
            * :attr:`LbSslCipherInfo.CIPHER_ECDH_ECDSA_WITH_AES_256_CBC_SHA`
            * :attr:`LbSslCipherInfo.CIPHER_ECDH_RSA_WITH_AES_256_CBC_SHA`
            * :attr:`LbSslCipherInfo.CIPHER_RSA_WITH_AES_256_CBC_SHA`
            * :attr:`LbSslCipherInfo.CIPHER_RSA_WITH_AES_128_CBC_SHA`
            * :attr:`LbSslCipherInfo.CIPHER_RSA_WITH_3DES_EDE_CBC_SHA`
            * :attr:`LbSslCipherInfo.CIPHER_ECDHE_RSA_WITH_AES_128_CBC_SHA`
            * :attr:`LbSslCipherInfo.CIPHER_ECDHE_RSA_WITH_AES_128_CBC_SHA256`
            * :attr:`LbSslCipherInfo.CIPHER_ECDHE_RSA_WITH_AES_256_CBC_SHA384`
            * :attr:`LbSslCipherInfo.CIPHER_RSA_WITH_AES_128_CBC_SHA256`
            * :attr:`LbSslCipherInfo.CIPHER_RSA_WITH_AES_128_GCM_SHA256`
            * :attr:`LbSslCipherInfo.CIPHER_RSA_WITH_AES_256_CBC_SHA256`
            * :attr:`LbSslCipherInfo.CIPHER_RSA_WITH_AES_256_GCM_SHA384`
            * :attr:`LbSslCipherInfo.CIPHER_ECDHE_ECDSA_WITH_AES_128_CBC_SHA`
            *
              :attr:`LbSslCipherInfo.CIPHER_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256`
            *
              :attr:`LbSslCipherInfo.CIPHER_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256`
            *
              :attr:`LbSslCipherInfo.CIPHER_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384`
            *
              :attr:`LbSslCipherInfo.CIPHER_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384`
            * :attr:`LbSslCipherInfo.CIPHER_ECDH_ECDSA_WITH_AES_128_CBC_SHA`
            * :attr:`LbSslCipherInfo.CIPHER_ECDH_ECDSA_WITH_AES_128_CBC_SHA256`
            * :attr:`LbSslCipherInfo.CIPHER_ECDH_ECDSA_WITH_AES_128_GCM_SHA256`
            * :attr:`LbSslCipherInfo.CIPHER_ECDH_ECDSA_WITH_AES_256_CBC_SHA384`
            * :attr:`LbSslCipherInfo.CIPHER_ECDH_ECDSA_WITH_AES_256_GCM_SHA384`
            * :attr:`LbSslCipherInfo.CIPHER_ECDH_RSA_WITH_AES_128_CBC_SHA`
            * :attr:`LbSslCipherInfo.CIPHER_ECDH_RSA_WITH_AES_128_CBC_SHA256`
            * :attr:`LbSslCipherInfo.CIPHER_ECDH_RSA_WITH_AES_128_GCM_SHA256`
            * :attr:`LbSslCipherInfo.CIPHER_ECDH_RSA_WITH_AES_256_CBC_SHA384`
            * :attr:`LbSslCipherInfo.CIPHER_ECDH_RSA_WITH_AES_256_GCM_SHA384`
            
             SSL cipher
        :type  cipher_group_labels: :class:`list` of :class:`str` or ``None``
        :param cipher_group_labels: Possible values are: 
            
            * :attr:`LbSslCipherInfo.CIPHER_GROUP_LABELS_BALANCED`
            * :attr:`LbSslCipherInfo.CIPHER_GROUP_LABELS_HIGH_SECURITY`
            * :attr:`LbSslCipherInfo.CIPHER_GROUP_LABELS_HIGH_COMPATIBILITY`
            * :attr:`LbSslCipherInfo.CIPHER_GROUP_LABELS_CUSTOM`
            
            Several cipher groups might contain the same cipher suite, each
            cipher suite could have multiple cipher group labels.
        :type  is_default: :class:`bool` or ``None``
        :param is_default: Default SSL cipher flag
        :type  is_secure: :class:`bool` or ``None``
        :param is_secure: Secure/insecure SSL cipher flag
        """
        self.cipher = cipher
        self.cipher_group_labels = cipher_group_labels
        self.is_default = is_default
        self.is_secure = is_secure
        VapiStruct.__init__(self)


LbSslCipherInfo._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.lb_ssl_cipher_info', {
        'cipher': type.OptionalType(type.StringType()),
        'cipher_group_labels': type.OptionalType(type.ListType(type.StringType())),
        'is_default': type.OptionalType(type.BooleanType()),
        'is_secure': type.OptionalType(type.BooleanType()),
    },
    LbSslCipherInfo,
    False,
    None))



class LbSslProtocolInfo(VapiStruct):
    """
    SSL protocol

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    PROTOCOL_SSL_V2 = "SSL_V2"
    """


    """
    PROTOCOL_SSL_V3 = "SSL_V3"
    """


    """
    PROTOCOL_TLS_V1 = "TLS_V1"
    """


    """
    PROTOCOL_TLS_V1_1 = "TLS_V1_1"
    """


    """
    PROTOCOL_TLS_V1_2 = "TLS_V1_2"
    """


    """



    _canonical_to_pep_names = {
                            'is_default': 'is_default',
                            'is_secure': 'is_secure',
                            'protocol': 'protocol',
                            }

    def __init__(self,
                 is_default=None,
                 is_secure=None,
                 protocol=None,
                ):
        """
        :type  is_default: :class:`bool` or ``None``
        :param is_default: Default SSL protocol flag
        :type  is_secure: :class:`bool` or ``None``
        :param is_secure: Secure/insecure SSL protocol flag
        :type  protocol: :class:`str` or ``None``
        :param protocol: Possible values are: 
            
            * :attr:`LbSslProtocolInfo.PROTOCOL_SSL_V2`
            * :attr:`LbSslProtocolInfo.PROTOCOL_SSL_V3`
            * :attr:`LbSslProtocolInfo.PROTOCOL_TLS_V1`
            * :attr:`LbSslProtocolInfo.PROTOCOL_TLS_V1_1`
            * :attr:`LbSslProtocolInfo.PROTOCOL_TLS_V1_2`
            
             SSL protocol
        """
        self.is_default = is_default
        self.is_secure = is_secure
        self.protocol = protocol
        VapiStruct.__init__(self)


LbSslProtocolInfo._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.lb_ssl_protocol_info', {
        'is_default': type.OptionalType(type.BooleanType()),
        'is_secure': type.OptionalType(type.BooleanType()),
        'protocol': type.OptionalType(type.StringType()),
    },
    LbSslProtocolInfo,
    False,
    None))



class LdapIdentitySource(VapiStruct):
    """
    This is the base type for all identity sources that use LDAP for
    authentication and group membership.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "LdapIdentitySource"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    RESOURCE_TYPE_ACTIVEDIRECTORYIDENTITYSOURCE = "ActiveDirectoryIdentitySource"
    """


    """
    RESOURCE_TYPE_OPENLDAPIDENTITYSOURCE = "OpenLdapIdentitySource"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'alternative_domain_names': 'alternative_domain_names',
                            'base_dn': 'base_dn',
                            'domain_name': 'domain_name',
                            'ldap_servers': 'ldap_servers',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='LdapIdentitySource',
                 tags=None,
                 alternative_domain_names=None,
                 base_dn=None,
                 domain_name=None,
                 ldap_servers=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`LdapIdentitySource.RESOURCE_TYPE_ACTIVEDIRECTORYIDENTITYSOURCE`
            * :attr:`LdapIdentitySource.RESOURCE_TYPE_OPENLDAPIDENTITYSOURCE`
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  alternative_domain_names: :class:`list` of :class:`str` or ``None``
        :param alternative_domain_names: After parsing the \"user\\\\@domain\", the domain portion is used
            to select the LDAP identity source to use. Additional domains
            listed here will also be directed to this LDAP identity source. In
            Active Directory these are sometimes referred to as Alternative UPN
            Suffixes.
        :type  base_dn: :class:`str` or ``None``
        :param base_dn: The subtree of the LDAP identity source to search when locating
            users and groups.
        :type  domain_name: :class:`str` or ``None``
        :param domain_name: The name of the authentication domain. When users log into NSX
            using an identity of the form \"user\\\\@domain\", NSX uses the
            domain portion to determine which LDAP identity source to use.
        :type  ldap_servers: :class:`list` of :class:`IdentitySourceLdapServer` or ``None``
        :param ldap_servers: The list of LDAP servers that provide LDAP service for this
            identity source. Currently, only one LDAP server is supported.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.alternative_domain_names = alternative_domain_names
        self.base_dn = base_dn
        self.domain_name = domain_name
        self.ldap_servers = ldap_servers
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

LdapIdentitySource._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ldap_identity_source', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'alternative_domain_names': type.OptionalType(type.ListType(type.StringType())),
        'base_dn': type.OptionalType(type.StringType()),
        'domain_name': type.OptionalType(type.StringType()),
        'ldap_servers': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'IdentitySourceLdapServer'))),
    },
    LdapIdentitySource,
    False,
    None))



class LdapIdentitySourceListResult(VapiStruct):
    """
    The results of listing LDAP identity sources.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param results: 
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`LdapIdentitySource`. When methods return a value of this
            class as a return value, the attribute will contain all the
            attributes defined in :class:`LdapIdentitySource`.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


LdapIdentitySourceListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ldap_identity_source_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'LdapIdentitySource')]))),
    },
    LdapIdentitySourceListResult,
    False,
    None))



class LdapIdentitySourceProbeResults(VapiStruct):
    """
    Results from probing all LDAP servers in an LDAP identity source
    configuration.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  results: :class:`list` of :class:`IdentitySourceLdapServerProbeResult` or ``None``
        :param results: Probe results for all probed LDAP servers.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.results = results
        VapiStruct.__init__(self)


LdapIdentitySourceProbeResults._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ldap_identity_source_probe_results', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'IdentitySourceLdapServerProbeResult'))),
    },
    LdapIdentitySourceProbeResults,
    False,
    None))



class LdapIdentitySourceSearchResultItem(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    TYPE_USER = "USER"
    """


    """
    TYPE_GROUP = "GROUP"
    """


    """



    _canonical_to_pep_names = {
                            'common_name': 'common_name',
                            'dn': 'dn',
                            'principal_name': 'principal_name',
                            'type': 'type',
                            }

    def __init__(self,
                 common_name=None,
                 dn=None,
                 principal_name=None,
                 type=None,
                ):
        """
        :type  common_name: :class:`str` or ``None``
        :param common_name: The Common Name (CN) of the entry, if available.
        :type  dn: :class:`str` or ``None``
        :param dn: Distinguished name (DN) of the entry.
        :type  principal_name: :class:`str` or ``None``
        :param principal_name: For Active Directory (AD) users, this will be the user principal
            name (UPN), in the format user\\\\@domain. For non-AD users, this
            will be the user's uid property, followed by \"\\\\@\" and the
            domain of the directory. For groups, this will be the group's
            common name, followed by \"\\\\@\" and the domain of the directory.
        :type  type: :class:`str` or ``None``
        :param type: Possible values are: 
            
            * :attr:`LdapIdentitySourceSearchResultItem.TYPE_USER`
            * :attr:`LdapIdentitySourceSearchResultItem.TYPE_GROUP`
            
             Describes the type of the entry
        """
        self.common_name = common_name
        self.dn = dn
        self.principal_name = principal_name
        self.type = type
        VapiStruct.__init__(self)


LdapIdentitySourceSearchResultItem._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ldap_identity_source_search_result_item', {
        'common_name': type.OptionalType(type.StringType()),
        'dn': type.OptionalType(type.StringType()),
        'principal_name': type.OptionalType(type.StringType()),
        'type': type.OptionalType(type.StringType()),
    },
    LdapIdentitySourceSearchResultItem,
    False,
    None))



class LdapIdentitySourceSearchResultList(VapiStruct):
    """
    A list of LDA entries returned from a search of an LDAP identity source.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  results: :class:`list` of :class:`LdapIdentitySourceSearchResultItem` or ``None``
        :param results: 
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.results = results
        VapiStruct.__init__(self)


LdapIdentitySourceSearchResultList._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ldap_identity_source_search_result_list', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'LdapIdentitySourceSearchResultItem'))),
    },
    LdapIdentitySourceSearchResultList,
    False,
    None))



class LdapProbeError(VapiStruct):
    """
    Detail about one error encountered during a probe.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    ERROR_TYPE_BASE_DN_NOT_FOUND = "BASE_DN_NOT_FOUND"
    """


    """
    ERROR_TYPE_BIND_DN_AND_PASSWORD_REQUIRED = "BIND_DN_AND_PASSWORD_REQUIRED"
    """


    """
    ERROR_TYPE_BIND_DN_INVALID = "BIND_DN_INVALID"
    """


    """
    ERROR_TYPE_CERTIFICATE_HOSTNAME_MISMATCH_ERROR = "CERTIFICATE_HOSTNAME_MISMATCH_ERROR"
    """


    """
    ERROR_TYPE_CERTIFICATE_MISMATCH_ERROR = "CERTIFICATE_MISMATCH_ERROR"
    """


    """
    ERROR_TYPE_CONNECTION_REFUSED = "CONNECTION_REFUSED"
    """


    """
    ERROR_TYPE_CONNECTION_TIMEOUT = "CONNECTION_TIMEOUT"
    """


    """
    ERROR_TYPE_GENERAL_ERROR = "GENERAL_ERROR"
    """


    """
    ERROR_TYPE_INVALID_CONFIGURED_CERTIFICATE = "INVALID_CONFIGURED_CERTIFICATE"
    """


    """
    ERROR_TYPE_INVALID_CREDENTIALS = "INVALID_CREDENTIALS"
    """


    """
    ERROR_TYPE_SSL_HANDSHAKE_ERROR = "SSL_HANDSHAKE_ERROR"
    """


    """
    ERROR_TYPE_STARTTLS_FAILED = "STARTTLS_FAILED"
    """


    """



    _canonical_to_pep_names = {
                            'error_type': 'error_type',
                            }

    def __init__(self,
                 error_type=None,
                ):
        """
        :type  error_type: :class:`str` or ``None``
        :param error_type: Possible values are: 
            
            * :attr:`LdapProbeError.ERROR_TYPE_BASE_DN_NOT_FOUND`
            * :attr:`LdapProbeError.ERROR_TYPE_BIND_DN_AND_PASSWORD_REQUIRED`
            * :attr:`LdapProbeError.ERROR_TYPE_BIND_DN_INVALID`
            *
              :attr:`LdapProbeError.ERROR_TYPE_CERTIFICATE_HOSTNAME_MISMATCH_ERROR`
            * :attr:`LdapProbeError.ERROR_TYPE_CERTIFICATE_MISMATCH_ERROR`
            * :attr:`LdapProbeError.ERROR_TYPE_CONNECTION_REFUSED`
            * :attr:`LdapProbeError.ERROR_TYPE_CONNECTION_TIMEOUT`
            * :attr:`LdapProbeError.ERROR_TYPE_GENERAL_ERROR`
            * :attr:`LdapProbeError.ERROR_TYPE_INVALID_CONFIGURED_CERTIFICATE`
            * :attr:`LdapProbeError.ERROR_TYPE_INVALID_CREDENTIALS`
            * :attr:`LdapProbeError.ERROR_TYPE_SSL_HANDSHAKE_ERROR`
            * :attr:`LdapProbeError.ERROR_TYPE_STARTTLS_FAILED`
            
            The cause of the error. BASE_DN_NOT_FOUND: The configured base DN
            does not exist on the LDAP server or is not readable.
            BIND_DN_AND_PASSWORD_REQUIRED: This server is configured to
            required a bind DN and password. Please add these to your LDAP
            server configuration. BIND_DN_INVALID: The bind DN or username
            provided is not valid on the LDAP server. Check that the bind DN is
            correct. This error may also indicate that the base DN in your
            configuration is incorrect. CERTIFICATE_HOSTNAME_MISMATCH_ERROR:
            The hostname configured for the LDAP server does not match the
            hostname in the server's certificate subject or alternative subject
            names. Be sure that the hostname you configure in NSX Manager
            matches one of those names. CERTIFICATE_MISMATCH_ERROR: The
            certificate presented by the LDAP server did not match the
            certificate in the configuration on the NSX Manager.
            CONNECTION_REFUSED: The connection was refused when contacting the
            LDAP server. Ensure that the LDAP server is running and that you
            are using the correct ip/hostname. CONNECTION_TIMEOUT: The
            connection timed out when contacting the LDAP server. Check the
            hostname/ip and any firewalls between the NSX Manager and the LDAP
            server. GENERAL_ERROR: An undetermined error occurred.
            INVALID_CONFIGURED_CERTIFICATE: The certificate configured for this
            LDAP server is invalid and could not be decoded. Check that the
            PEM-formatted certificate you provided is correct.
            INVALID_CREDENTIALS: The username and/or password are incorrect.
            SSL_HANDSHAKE_ERROR: An error occurred while establishing a secure
            connection with the LDAP server. Check that the LDAP server's
            certificate is correct, and that it is using an SSL/TLS cipher
            suite that is compatible with the NSX Manager. This error can also
            occur if the hostname you have configured for the LDAP server does
            not match any of the hostnames in the Subject Alternative Name
            records in the server certificate. STARTTLS_FAILED: Unable to use
            StartTLS to upgrade the connection to use TLS. Ensure that the LDAP
            server supports TLS and if not, use LDAP or LDAPS as the protocol.
        """
        self.error_type = error_type
        VapiStruct.__init__(self)


LdapProbeError._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ldap_probe_error', {
        'error_type': type.OptionalType(type.StringType()),
    },
    LdapProbeError,
    False,
    None))



class Legend(VapiStruct):
    """
    Represents legend that describes the entities of the widget.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    ALIGNMENT_HORIZONTAL = "HORIZONTAL"
    """


    """
    ALIGNMENT_VERTICAL = "VERTICAL"
    """


    """
    POSITION_TOP = "TOP"
    """


    """
    POSITION_BOTTOM = "BOTTOM"
    """


    """
    POSITION_LEFT = "LEFT"
    """


    """
    POSITION_RIGHT = "RIGHT"
    """


    """
    POSITION_TOP_RIGHT = "TOP_RIGHT"
    """


    """
    TYPE_CIRCLE = "CIRCLE"
    """


    """



    _canonical_to_pep_names = {
                            'alignment': 'alignment',
                            'display_count': 'display_count',
                            'position': 'position',
                            'type': 'type',
                            'unit': 'unit',
                            }

    def __init__(self,
                 alignment=None,
                 display_count=None,
                 position=None,
                 type=None,
                 unit=None,
                ):
        """
        :type  alignment: :class:`str` or ``None``
        :param alignment: Possible values are: 
            
            * :attr:`Legend.ALIGNMENT_HORIZONTAL`
            * :attr:`Legend.ALIGNMENT_VERTICAL`
            
            Describes the alignment of legend. Alignment of a legend denotes
            how individual items of the legend are aligned in a container. For
            example, if VERTICAL is chosen then the items of the legend will
            appear one below the other and if HORIZONTAL is chosen then the
            items will appear side by side.
        :type  display_count: :class:`bool` or ``None``
        :param display_count: If set to true, it will display the counts in legend. If set to
            false, counts of entities are not displayed in the legend.
        :type  position: :class:`str` or ``None``
        :param position: Possible values are: 
            
            * :attr:`Legend.POSITION_TOP`
            * :attr:`Legend.POSITION_BOTTOM`
            * :attr:`Legend.POSITION_LEFT`
            * :attr:`Legend.POSITION_RIGHT`
            * :attr:`Legend.POSITION_TOP_RIGHT`
            
            Describes the relative placement of legend. The legend of a widget
            can be placed either to the TOP or BOTTOM or LEFT or RIGHT relative
            to the widget. For example, if RIGHT is chosen then legend is
            placed to the right of the widget.
        :type  type: :class:`str` or ``None``
        :param type: Possible values are: 
            
            * :attr:`Legend.TYPE_CIRCLE`
            
            Describes the render type for the legend. The legend for an entity
            describes the entity in the widget. The supported legend type is a
            circle against which the entity's details such as display_name are
            shown. The color of the circle denotes the color of the entity
            shown inside the widget.
        :type  unit: :class:`str` or ``None``
        :param unit: Show unit of entities in the legend.
        """
        self.alignment = alignment
        self.display_count = display_count
        self.position = position
        self.type = type
        self.unit = unit
        VapiStruct.__init__(self)


Legend._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.legend', {
        'alignment': type.OptionalType(type.StringType()),
        'display_count': type.OptionalType(type.BooleanType()),
        'position': type.OptionalType(type.StringType()),
        'type': type.OptionalType(type.StringType()),
        'unit': type.OptionalType(type.StringType()),
    },
    Legend,
    False,
    None))



class ListResult(VapiStruct):
    """
    Base class for list results from collections

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        VapiStruct.__init__(self)


ListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
    },
    ListResult,
    False,
    None))



class LocalEgress(VapiStruct):
    """
    Local Egress is used on both server and client sites so that the gateway is
    used for N-S traffic and overhead on L2VPN tunnel is reduced.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'optimized_ips': 'optimized_ips',
                            }

    def __init__(self,
                 optimized_ips=None,
                ):
        """
        :type  optimized_ips: :class:`list` of :class:`str` or ``None``
        :param optimized_ips: Gateway IP for Local Egress. Local egress is enabled only when this
            list is not empty. format: ip
        """
        self.optimized_ips = optimized_ips
        VapiStruct.__init__(self)


LocalEgress._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.local_egress', {
        'optimized_ips': type.OptionalType(type.ListType(type.StringType())),
    },
    LocalEgress,
    False,
    None))



class LocalEgressRoutingEntry(VapiStruct):
    """
    Local egress routing policy

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'nexthop_address': 'nexthop_address',
                            'prefix_list_paths': 'prefix_list_paths',
                            }

    def __init__(self,
                 nexthop_address=None,
                 prefix_list_paths=None,
                ):
        """
        :type  nexthop_address: :class:`str` or ``None``
        :param nexthop_address: Next hop address for proximity routing.
        :type  prefix_list_paths: :class:`list` of :class:`str` or ``None``
        :param prefix_list_paths: The destination address of traffic matching a prefix-list is
            forwarded to the nexthop_address. Traffic matching a prefix list
            with Action DENY will be dropped. Individual prefix-lists specified
            could have different actions.
        """
        self.nexthop_address = nexthop_address
        self.prefix_list_paths = prefix_list_paths
        VapiStruct.__init__(self)


LocalEgressRoutingEntry._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.local_egress_routing_entry', {
        'nexthop_address': type.OptionalType(type.StringType()),
        'prefix_list_paths': type.OptionalType(type.ListType(type.StringType())),
    },
    LocalEgressRoutingEntry,
    False,
    None))



class LocaleServices(VapiStruct):
    """
    Site specific configuration of Tier0 in multi-site scenario

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    ROUTE_REDISTRIBUTION_TYPES_TIER0_STATIC = "TIER0_STATIC"
    """


    """
    ROUTE_REDISTRIBUTION_TYPES_TIER0_CONNECTED = "TIER0_CONNECTED"
    """


    """
    ROUTE_REDISTRIBUTION_TYPES_TIER0_EXTERNAL_INTERFACE = "TIER0_EXTERNAL_INTERFACE"
    """


    """
    ROUTE_REDISTRIBUTION_TYPES_TIER0_SEGMENT = "TIER0_SEGMENT"
    """


    """
    ROUTE_REDISTRIBUTION_TYPES_TIER0_ROUTER_LINK = "TIER0_ROUTER_LINK"
    """


    """
    ROUTE_REDISTRIBUTION_TYPES_TIER0_SERVICE_INTERFACE = "TIER0_SERVICE_INTERFACE"
    """


    """
    ROUTE_REDISTRIBUTION_TYPES_TIER0_LOOPBACK_INTERFACE = "TIER0_LOOPBACK_INTERFACE"
    """


    """
    ROUTE_REDISTRIBUTION_TYPES_TIER0_DNS_FORWARDER_IP = "TIER0_DNS_FORWARDER_IP"
    """


    """
    ROUTE_REDISTRIBUTION_TYPES_TIER0_IPSEC_LOCAL_IP = "TIER0_IPSEC_LOCAL_IP"
    """


    """
    ROUTE_REDISTRIBUTION_TYPES_TIER0_NAT = "TIER0_NAT"
    """


    """
    ROUTE_REDISTRIBUTION_TYPES_TIER0_EVPN_TEP_IP = "TIER0_EVPN_TEP_IP"
    """


    """
    ROUTE_REDISTRIBUTION_TYPES_TIER1_NAT = "TIER1_NAT"
    """


    """
    ROUTE_REDISTRIBUTION_TYPES_TIER1_STATIC = "TIER1_STATIC"
    """


    """
    ROUTE_REDISTRIBUTION_TYPES_TIER1_LB_VIP = "TIER1_LB_VIP"
    """


    """
    ROUTE_REDISTRIBUTION_TYPES_TIER1_LB_SNAT = "TIER1_LB_SNAT"
    """


    """
    ROUTE_REDISTRIBUTION_TYPES_TIER1_DNS_FORWARDER_IP = "TIER1_DNS_FORWARDER_IP"
    """


    """
    ROUTE_REDISTRIBUTION_TYPES_TIER1_CONNECTED = "TIER1_CONNECTED"
    """


    """
    ROUTE_REDISTRIBUTION_TYPES_TIER1_SERVICE_INTERFACE = "TIER1_SERVICE_INTERFACE"
    """


    """
    ROUTE_REDISTRIBUTION_TYPES_TIER1_SEGMENT = "TIER1_SEGMENT"
    """


    """
    ROUTE_REDISTRIBUTION_TYPES_TIER1_IPSEC_LOCAL_ENDPOINT = "TIER1_IPSEC_LOCAL_ENDPOINT"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'edge_cluster_path': 'edge_cluster_path',
                            'ha_vip_configs': 'ha_vip_configs',
                            'preferred_edge_paths': 'preferred_edge_paths',
                            'route_redistribution_config': 'route_redistribution_config',
                            'route_redistribution_types': 'route_redistribution_types',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 edge_cluster_path=None,
                 ha_vip_configs=None,
                 preferred_edge_paths=None,
                 route_redistribution_config=None,
                 route_redistribution_types=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  edge_cluster_path: :class:`str` or ``None``
        :param edge_cluster_path: Policy path to edge cluster. Auto-assigned on Tier0 if associated
            enforcement-point has only one edge cluster.
        :type  ha_vip_configs: :class:`list` of :class:`Tier0HaVipConfig` or ``None``
        :param ha_vip_configs: This configuration can be defined only for Active-Standby Tier0
            gateway to provide redundancy. For mulitple external interfaces,
            multiple HA VIP configs must be defined and each config will pair
            exactly two external interfaces. The VIP will move and will always
            be owned by the Active node. When this property is configured,
            configuration of dynamic-routing is not allowed.
        :type  preferred_edge_paths: :class:`list` of :class:`str` or ``None``
        :param preferred_edge_paths: Policy paths to edge nodes. For Tier1 gateway, the field is used to
            statically assign the ordered list of up to two edge nodes for
            stateful services. To enable auto allocation of nodes from the
            specified edge cluster the field must be left unset. The auto
            allocation of nodes is supported only for the Tier1 gateway. For
            Tier0 gateway specified edge is used as a preferred edge node when
            failover mode is set to PREEMPTIVE, not applicable otherwise.
        :type  route_redistribution_config: :class:`Tier0RouteRedistributionConfig` or ``None``
        :param route_redistribution_config: Configure all route redistribution properties like enable/disable
            redistributon, redistribution rule and so on.
        :type  route_redistribution_types: :class:`list` of :class:`str` or ``None``
        :param route_redistribution_types: Possible values are: 
            
            * :attr:`LocaleServices.ROUTE_REDISTRIBUTION_TYPES_TIER0_STATIC`
            * :attr:`LocaleServices.ROUTE_REDISTRIBUTION_TYPES_TIER0_CONNECTED`
            *
              :attr:`LocaleServices.ROUTE_REDISTRIBUTION_TYPES_TIER0_EXTERNAL_INTERFACE`
            * :attr:`LocaleServices.ROUTE_REDISTRIBUTION_TYPES_TIER0_SEGMENT`
            *
              :attr:`LocaleServices.ROUTE_REDISTRIBUTION_TYPES_TIER0_ROUTER_LINK`
            *
              :attr:`LocaleServices.ROUTE_REDISTRIBUTION_TYPES_TIER0_SERVICE_INTERFACE`
            *
              :attr:`LocaleServices.ROUTE_REDISTRIBUTION_TYPES_TIER0_LOOPBACK_INTERFACE`
            *
              :attr:`LocaleServices.ROUTE_REDISTRIBUTION_TYPES_TIER0_DNS_FORWARDER_IP`
            *
              :attr:`LocaleServices.ROUTE_REDISTRIBUTION_TYPES_TIER0_IPSEC_LOCAL_IP`
            * :attr:`LocaleServices.ROUTE_REDISTRIBUTION_TYPES_TIER0_NAT`
            *
              :attr:`LocaleServices.ROUTE_REDISTRIBUTION_TYPES_TIER0_EVPN_TEP_IP`
            * :attr:`LocaleServices.ROUTE_REDISTRIBUTION_TYPES_TIER1_NAT`
            * :attr:`LocaleServices.ROUTE_REDISTRIBUTION_TYPES_TIER1_STATIC`
            * :attr:`LocaleServices.ROUTE_REDISTRIBUTION_TYPES_TIER1_LB_VIP`
            * :attr:`LocaleServices.ROUTE_REDISTRIBUTION_TYPES_TIER1_LB_SNAT`
            *
              :attr:`LocaleServices.ROUTE_REDISTRIBUTION_TYPES_TIER1_DNS_FORWARDER_IP`
            * :attr:`LocaleServices.ROUTE_REDISTRIBUTION_TYPES_TIER1_CONNECTED`
            *
              :attr:`LocaleServices.ROUTE_REDISTRIBUTION_TYPES_TIER1_SERVICE_INTERFACE`
            * :attr:`LocaleServices.ROUTE_REDISTRIBUTION_TYPES_TIER1_SEGMENT`
            *
              :attr:`LocaleServices.ROUTE_REDISTRIBUTION_TYPES_TIER1_IPSEC_LOCAL_ENDPOINT`
            
            Enable redistribution of different types of routes on Tier-0. This
            property is only valid for locale-service under Tier-0. This
            property is deprecated, please use \"route_redistribution_config\"
            property to configure redistribution rules.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.edge_cluster_path = edge_cluster_path
        self.ha_vip_configs = ha_vip_configs
        self.preferred_edge_paths = preferred_edge_paths
        self.route_redistribution_config = route_redistribution_config
        self.route_redistribution_types = route_redistribution_types
        VapiStruct.__init__(self)


LocaleServices._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.locale_services', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'edge_cluster_path': type.OptionalType(type.StringType()),
        'ha_vip_configs': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tier0HaVipConfig'))),
        'preferred_edge_paths': type.OptionalType(type.ListType(type.StringType())),
        'route_redistribution_config': type.OptionalType(type.ReferenceType(__name__, 'Tier0RouteRedistributionConfig')),
        'route_redistribution_types': type.OptionalType(type.ListType(type.StringType())),
    },
    LocaleServices,
    False,
    None))



class LocaleServicesListResult(VapiStruct):
    """
    Paged collection of LocaleServices

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`LocaleServices` or ``None``
        :param results: LocaleServices results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


LocaleServicesListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.locale_services_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'LocaleServices'))),
    },
    LocaleServicesListResult,
    False,
    None))



class LogicalPortStatistics(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'rx_bytes': 'rx_bytes',
                            'rx_packets': 'rx_packets',
                            'tx_bytes': 'tx_bytes',
                            'tx_packets': 'tx_packets',
                            'dropped_by_security_packets': 'dropped_by_security_packets',
                            'mac_learning': 'mac_learning',
                            'last_update_timestamp': 'last_update_timestamp',
                            'logical_port_id': 'logical_port_id',
                            }

    def __init__(self,
                 rx_bytes=None,
                 rx_packets=None,
                 tx_bytes=None,
                 tx_packets=None,
                 dropped_by_security_packets=None,
                 mac_learning=None,
                 last_update_timestamp=None,
                 logical_port_id=None,
                ):
        """
        :type  rx_bytes: :class:`DataCounter` or ``None``
        :param rx_bytes: 
        :type  rx_packets: :class:`DataCounter` or ``None``
        :param rx_packets: 
        :type  tx_bytes: :class:`DataCounter` or ``None``
        :param tx_bytes: 
        :type  tx_packets: :class:`DataCounter` or ``None``
        :param tx_packets: 
        :type  dropped_by_security_packets: :class:`PacketsDroppedBySecurity` or ``None``
        :param dropped_by_security_packets: 
        :type  mac_learning: :class:`MacLearningCounters` or ``None``
        :param mac_learning: 
        :type  last_update_timestamp: :class:`long` or ``None``
        :param last_update_timestamp: Timestamp when the data was last updated; unset if data source has
            never updated the data. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  logical_port_id: :class:`str` or ``None``
        :param logical_port_id: The id of the logical port
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.rx_bytes = rx_bytes
        self.rx_packets = rx_packets
        self.tx_bytes = tx_bytes
        self.tx_packets = tx_packets
        self.dropped_by_security_packets = dropped_by_security_packets
        self.mac_learning = mac_learning
        self.last_update_timestamp = last_update_timestamp
        self.logical_port_id = logical_port_id
        VapiStruct.__init__(self)


LogicalPortStatistics._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.logical_port_statistics', {
        'rx_bytes': type.OptionalType(type.ReferenceType(__name__, 'DataCounter')),
        'rx_packets': type.OptionalType(type.ReferenceType(__name__, 'DataCounter')),
        'tx_bytes': type.OptionalType(type.ReferenceType(__name__, 'DataCounter')),
        'tx_packets': type.OptionalType(type.ReferenceType(__name__, 'DataCounter')),
        'dropped_by_security_packets': type.OptionalType(type.ReferenceType(__name__, 'PacketsDroppedBySecurity')),
        'mac_learning': type.OptionalType(type.ReferenceType(__name__, 'MacLearningCounters')),
        'last_update_timestamp': type.OptionalType(type.IntegerType()),
        'logical_port_id': type.OptionalType(type.StringType()),
    },
    LogicalPortStatistics,
    False,
    None))



class LogicalRouterPortCounters(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'blocked_packets': 'blocked_packets',
                            'dad_dropped_packets': 'dad_dropped_packets',
                            'destination_unsupported_dropped_packets': 'destination_unsupported_dropped_packets',
                            'dropped_packets': 'dropped_packets',
                            'firewall_dropped_packets': 'firewall_dropped_packets',
                            'frag_needed_dropped_packets': 'frag_needed_dropped_packets',
                            'ipsec_dropped_packets': 'ipsec_dropped_packets',
                            'ipsec_no_sa_dropped_packets': 'ipsec_no_sa_dropped_packets',
                            'ipsec_no_vti_dropped_packets': 'ipsec_no_vti_dropped_packets',
                            'ipsec_pol_block_dropped_packets': 'ipsec_pol_block_dropped_packets',
                            'ipsec_pol_err_dropped_packets': 'ipsec_pol_err_dropped_packets',
                            'ipv6_dropped_packets': 'ipv6_dropped_packets',
                            'kni_dropped_packets': 'kni_dropped_packets',
                            'l4port_unsupported_dropped_packets': 'l4port_unsupported_dropped_packets',
                            'malformed_dropped_packets': 'malformed_dropped_packets',
                            'no_arp_dropped_packets': 'no_arp_dropped_packets',
                            'no_linked_dropped_packets': 'no_linked_dropped_packets',
                            'no_mem_dropped_packets': 'no_mem_dropped_packets',
                            'no_receiver_dropped_packets': 'no_receiver_dropped_packets',
                            'no_route_dropped_packets': 'no_route_dropped_packets',
                            'non_ip_dropped_packets': 'non_ip_dropped_packets',
                            'proto_unsupported_dropped_packets': 'proto_unsupported_dropped_packets',
                            'redirect_dropped_packets': 'redirect_dropped_packets',
                            'rpf_check_dropped_packets': 'rpf_check_dropped_packets',
                            'service_insert_dropped_packets': 'service_insert_dropped_packets',
                            'total_bytes': 'total_bytes',
                            'total_packets': 'total_packets',
                            'ttl_exceeded_dropped_packets': 'ttl_exceeded_dropped_packets',
                            }

    def __init__(self,
                 blocked_packets=None,
                 dad_dropped_packets=None,
                 destination_unsupported_dropped_packets=None,
                 dropped_packets=None,
                 firewall_dropped_packets=None,
                 frag_needed_dropped_packets=None,
                 ipsec_dropped_packets=None,
                 ipsec_no_sa_dropped_packets=None,
                 ipsec_no_vti_dropped_packets=None,
                 ipsec_pol_block_dropped_packets=None,
                 ipsec_pol_err_dropped_packets=None,
                 ipv6_dropped_packets=None,
                 kni_dropped_packets=None,
                 l4port_unsupported_dropped_packets=None,
                 malformed_dropped_packets=None,
                 no_arp_dropped_packets=None,
                 no_linked_dropped_packets=None,
                 no_mem_dropped_packets=None,
                 no_receiver_dropped_packets=None,
                 no_route_dropped_packets=None,
                 non_ip_dropped_packets=None,
                 proto_unsupported_dropped_packets=None,
                 redirect_dropped_packets=None,
                 rpf_check_dropped_packets=None,
                 service_insert_dropped_packets=None,
                 total_bytes=None,
                 total_packets=None,
                 ttl_exceeded_dropped_packets=None,
                ):
        """
        :type  blocked_packets: :class:`long` or ``None``
        :param blocked_packets: The total number of packets blocked. format: int64
        :type  dad_dropped_packets: :class:`long` or ``None``
        :param dad_dropped_packets: Number of duplicate address detected packets dropped. format: int64
        :type  destination_unsupported_dropped_packets: :class:`long` or ``None``
        :param destination_unsupported_dropped_packets: Number of packtes dropped as destination is not supported. format:
            int64
        :type  dropped_packets: :class:`long` or ``None``
        :param dropped_packets: The total number of packets dropped. format: int64
        :type  firewall_dropped_packets: :class:`long` or ``None``
        :param firewall_dropped_packets: Number of firewall packets dropped. format: int64
        :type  frag_needed_dropped_packets: :class:`long` or ``None``
        :param frag_needed_dropped_packets: Number of fragmentation needed packets dropped. format: int64
        :type  ipsec_dropped_packets: :class:`long` or ``None``
        :param ipsec_dropped_packets: Number of IPSec packets dropped format: int64
        :type  ipsec_no_sa_dropped_packets: :class:`long` or ``None``
        :param ipsec_no_sa_dropped_packets: Number of IPSec no security association packets dropped. format:
            int64
        :type  ipsec_no_vti_dropped_packets: :class:`long` or ``None``
        :param ipsec_no_vti_dropped_packets: Number of IPSec packets dropped as no VTI is present. format: int64
        :type  ipsec_pol_block_dropped_packets: :class:`long` or ``None``
        :param ipsec_pol_block_dropped_packets: Number of IPSec policy block packets dropped. format: int64
        :type  ipsec_pol_err_dropped_packets: :class:`long` or ``None``
        :param ipsec_pol_err_dropped_packets: Number of IPSec policy error packets dropped. format: int64
        :type  ipv6_dropped_packets: :class:`long` or ``None``
        :param ipv6_dropped_packets: Number of IPV6 packets dropped. format: int64
        :type  kni_dropped_packets: :class:`long` or ``None``
        :param kni_dropped_packets: Number of DPDK kernal NIC interface packets dropped. format: int64
        :type  l4port_unsupported_dropped_packets: :class:`long` or ``None``
        :param l4port_unsupported_dropped_packets: Number of packets dropped due to unsupported L4 port. format: int64
        :type  malformed_dropped_packets: :class:`long` or ``None``
        :param malformed_dropped_packets: Number of packtes dropped as they are malformed. format: int64
        :type  no_arp_dropped_packets: :class:`long` or ``None``
        :param no_arp_dropped_packets: Number of no ARP packets dropped. format: int64
        :type  no_linked_dropped_packets: :class:`long` or ``None``
        :param no_linked_dropped_packets: Number of packets dropped as no linked ports are present. format:
            int64
        :type  no_mem_dropped_packets: :class:`long` or ``None``
        :param no_mem_dropped_packets: Number of packets dropped due to insufficient memory. format: int64
        :type  no_receiver_dropped_packets: :class:`long` or ``None``
        :param no_receiver_dropped_packets: Number of packets dropped due to absence of receiver. format: int64
        :type  no_route_dropped_packets: :class:`long` or ``None``
        :param no_route_dropped_packets: The number of no route packets dropped format: int64
        :type  non_ip_dropped_packets: :class:`long` or ``None``
        :param non_ip_dropped_packets: Number of non IP packets dropped. format: int64
        :type  proto_unsupported_dropped_packets: :class:`long` or ``None``
        :param proto_unsupported_dropped_packets: Number of packets dropped as protocol is unsupported. format: int64
        :type  redirect_dropped_packets: :class:`long` or ``None``
        :param redirect_dropped_packets: Number of redirect packets dropped. format: int64
        :type  rpf_check_dropped_packets: :class:`long` or ``None``
        :param rpf_check_dropped_packets: Number of reverse-path forwarding check packets dropped. format:
            int64
        :type  service_insert_dropped_packets: :class:`long` or ``None``
        :param service_insert_dropped_packets: Number of service insert packets dropped. format: int64
        :type  total_bytes: :class:`long` or ``None``
        :param total_bytes: The total number of bytes transferred. format: int64
        :type  total_packets: :class:`long` or ``None``
        :param total_packets: The total number of packets transferred. format: int64
        :type  ttl_exceeded_dropped_packets: :class:`long` or ``None``
        :param ttl_exceeded_dropped_packets: Number of time to live exceeded packets dropped. format: int64
        """
        self.blocked_packets = blocked_packets
        self.dad_dropped_packets = dad_dropped_packets
        self.destination_unsupported_dropped_packets = destination_unsupported_dropped_packets
        self.dropped_packets = dropped_packets
        self.firewall_dropped_packets = firewall_dropped_packets
        self.frag_needed_dropped_packets = frag_needed_dropped_packets
        self.ipsec_dropped_packets = ipsec_dropped_packets
        self.ipsec_no_sa_dropped_packets = ipsec_no_sa_dropped_packets
        self.ipsec_no_vti_dropped_packets = ipsec_no_vti_dropped_packets
        self.ipsec_pol_block_dropped_packets = ipsec_pol_block_dropped_packets
        self.ipsec_pol_err_dropped_packets = ipsec_pol_err_dropped_packets
        self.ipv6_dropped_packets = ipv6_dropped_packets
        self.kni_dropped_packets = kni_dropped_packets
        self.l4port_unsupported_dropped_packets = l4port_unsupported_dropped_packets
        self.malformed_dropped_packets = malformed_dropped_packets
        self.no_arp_dropped_packets = no_arp_dropped_packets
        self.no_linked_dropped_packets = no_linked_dropped_packets
        self.no_mem_dropped_packets = no_mem_dropped_packets
        self.no_receiver_dropped_packets = no_receiver_dropped_packets
        self.no_route_dropped_packets = no_route_dropped_packets
        self.non_ip_dropped_packets = non_ip_dropped_packets
        self.proto_unsupported_dropped_packets = proto_unsupported_dropped_packets
        self.redirect_dropped_packets = redirect_dropped_packets
        self.rpf_check_dropped_packets = rpf_check_dropped_packets
        self.service_insert_dropped_packets = service_insert_dropped_packets
        self.total_bytes = total_bytes
        self.total_packets = total_packets
        self.ttl_exceeded_dropped_packets = ttl_exceeded_dropped_packets
        VapiStruct.__init__(self)


LogicalRouterPortCounters._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.logical_router_port_counters', {
        'blocked_packets': type.OptionalType(type.IntegerType()),
        'dad_dropped_packets': type.OptionalType(type.IntegerType()),
        'destination_unsupported_dropped_packets': type.OptionalType(type.IntegerType()),
        'dropped_packets': type.OptionalType(type.IntegerType()),
        'firewall_dropped_packets': type.OptionalType(type.IntegerType()),
        'frag_needed_dropped_packets': type.OptionalType(type.IntegerType()),
        'ipsec_dropped_packets': type.OptionalType(type.IntegerType()),
        'ipsec_no_sa_dropped_packets': type.OptionalType(type.IntegerType()),
        'ipsec_no_vti_dropped_packets': type.OptionalType(type.IntegerType()),
        'ipsec_pol_block_dropped_packets': type.OptionalType(type.IntegerType()),
        'ipsec_pol_err_dropped_packets': type.OptionalType(type.IntegerType()),
        'ipv6_dropped_packets': type.OptionalType(type.IntegerType()),
        'kni_dropped_packets': type.OptionalType(type.IntegerType()),
        'l4port_unsupported_dropped_packets': type.OptionalType(type.IntegerType()),
        'malformed_dropped_packets': type.OptionalType(type.IntegerType()),
        'no_arp_dropped_packets': type.OptionalType(type.IntegerType()),
        'no_linked_dropped_packets': type.OptionalType(type.IntegerType()),
        'no_mem_dropped_packets': type.OptionalType(type.IntegerType()),
        'no_receiver_dropped_packets': type.OptionalType(type.IntegerType()),
        'no_route_dropped_packets': type.OptionalType(type.IntegerType()),
        'non_ip_dropped_packets': type.OptionalType(type.IntegerType()),
        'proto_unsupported_dropped_packets': type.OptionalType(type.IntegerType()),
        'redirect_dropped_packets': type.OptionalType(type.IntegerType()),
        'rpf_check_dropped_packets': type.OptionalType(type.IntegerType()),
        'service_insert_dropped_packets': type.OptionalType(type.IntegerType()),
        'total_bytes': type.OptionalType(type.IntegerType()),
        'total_packets': type.OptionalType(type.IntegerType()),
        'ttl_exceeded_dropped_packets': type.OptionalType(type.IntegerType()),
    },
    LogicalRouterPortCounters,
    False,
    None))



class LogicalRouterPortStatistics(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'logical_router_port_id': 'logical_router_port_id',
                            'per_node_statistics': 'per_node_statistics',
                            }

    def __init__(self,
                 logical_router_port_id=None,
                 per_node_statistics=None,
                ):
        """
        :type  logical_router_port_id: :class:`str` or ``None``
        :param logical_router_port_id: The ID of the logical router port
        :type  per_node_statistics: :class:`list` of :class:`LogicalRouterPortStatisticsPerNode` or ``None``
        :param per_node_statistics: Per Node Statistics
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.logical_router_port_id = logical_router_port_id
        self.per_node_statistics = per_node_statistics
        VapiStruct.__init__(self)


LogicalRouterPortStatistics._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.logical_router_port_statistics', {
        'logical_router_port_id': type.OptionalType(type.StringType()),
        'per_node_statistics': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'LogicalRouterPortStatisticsPerNode'))),
    },
    LogicalRouterPortStatistics,
    False,
    None))



class LogicalRouterPortStatisticsPerNode(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'last_update_timestamp': 'last_update_timestamp',
                            'rx': 'rx',
                            'tx': 'tx',
                            'transport_node_id': 'transport_node_id',
                            }

    def __init__(self,
                 last_update_timestamp=None,
                 rx=None,
                 tx=None,
                 transport_node_id=None,
                ):
        """
        :type  last_update_timestamp: :class:`long` or ``None``
        :param last_update_timestamp: Timestamp when the data was last updated; unset if data source has
            never updated the data. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  rx: :class:`LogicalRouterPortCounters` or ``None``
        :param rx: 
        :type  tx: :class:`LogicalRouterPortCounters` or ``None``
        :param tx: 
        :type  transport_node_id: :class:`str` or ``None``
        :param transport_node_id: The ID of the TransportNode
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.last_update_timestamp = last_update_timestamp
        self.rx = rx
        self.tx = tx
        self.transport_node_id = transport_node_id
        VapiStruct.__init__(self)


LogicalRouterPortStatisticsPerNode._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.logical_router_port_statistics_per_node', {
        'last_update_timestamp': type.OptionalType(type.IntegerType()),
        'rx': type.OptionalType(type.ReferenceType(__name__, 'LogicalRouterPortCounters')),
        'tx': type.OptionalType(type.ReferenceType(__name__, 'LogicalRouterPortCounters')),
        'transport_node_id': type.OptionalType(type.StringType()),
    },
    LogicalRouterPortStatisticsPerNode,
    False,
    None))



class LogicalRouterPortStatisticsSummary(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'last_update_timestamp': 'last_update_timestamp',
                            'rx': 'rx',
                            'tx': 'tx',
                            'logical_router_port_id': 'logical_router_port_id',
                            }

    def __init__(self,
                 last_update_timestamp=None,
                 rx=None,
                 tx=None,
                 logical_router_port_id=None,
                ):
        """
        :type  last_update_timestamp: :class:`long` or ``None``
        :param last_update_timestamp: Timestamp when the data was last updated; unset if data source has
            never updated the data. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  rx: :class:`LogicalRouterPortCounters` or ``None``
        :param rx: 
        :type  tx: :class:`LogicalRouterPortCounters` or ``None``
        :param tx: 
        :type  logical_router_port_id: :class:`str` or ``None``
        :param logical_router_port_id: The ID of the logical router port
        """
        self.last_update_timestamp = last_update_timestamp
        self.rx = rx
        self.tx = tx
        self.logical_router_port_id = logical_router_port_id
        VapiStruct.__init__(self)


LogicalRouterPortStatisticsSummary._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.logical_router_port_statistics_summary', {
        'last_update_timestamp': type.OptionalType(type.IntegerType()),
        'rx': type.OptionalType(type.ReferenceType(__name__, 'LogicalRouterPortCounters')),
        'tx': type.OptionalType(type.ReferenceType(__name__, 'LogicalRouterPortCounters')),
        'logical_router_port_id': type.OptionalType(type.StringType()),
    },
    LogicalRouterPortStatisticsSummary,
    False,
    None))



class LogicalRouterState(VapiStruct):
    """
    This holds the state of Logical Router. If there are errors in realizing LR
    outside of MP, it gives details of the components and specific errors.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    STATE_PENDING = "pending"
    """


    """
    STATE_IN_PROGRESS = "in_progress"
    """


    """
    STATE_SUCCESS = "success"
    """


    """
    STATE_FAILED = "failed"
    """


    """
    STATE_PARTIAL_SUCCESS = "partial_success"
    """


    """
    STATE_ORPHANED = "orphaned"
    """


    """
    STATE_UNKNOWN = "unknown"
    """


    """
    STATE_ERROR = "error"
    """


    """
    STATE_IN_SYNC = "in_sync"
    """


    """
    STATE_NOT_AVAILABLE = "NOT_AVAILABLE"
    """


    """
    STATE_VM_DEPLOYMENT_QUEUED = "VM_DEPLOYMENT_QUEUED"
    """


    """
    STATE_VM_DEPLOYMENT_IN_PROGRESS = "VM_DEPLOYMENT_IN_PROGRESS"
    """


    """
    STATE_VM_DEPLOYMENT_FAILED = "VM_DEPLOYMENT_FAILED"
    """


    """
    STATE_VM_POWER_ON_IN_PROGRESS = "VM_POWER_ON_IN_PROGRESS"
    """


    """
    STATE_VM_POWER_ON_FAILED = "VM_POWER_ON_FAILED"
    """


    """
    STATE_REGISTRATION_PENDING = "REGISTRATION_PENDING"
    """


    """
    STATE_NODE_NOT_READY = "NODE_NOT_READY"
    """


    """
    STATE_NODE_READY = "NODE_READY"
    """


    """
    STATE_VM_POWER_OFF_IN_PROGRESS = "VM_POWER_OFF_IN_PROGRESS"
    """


    """
    STATE_VM_POWER_OFF_FAILED = "VM_POWER_OFF_FAILED"
    """


    """
    STATE_VM_UNDEPLOY_IN_PROGRESS = "VM_UNDEPLOY_IN_PROGRESS"
    """


    """
    STATE_VM_UNDEPLOY_FAILED = "VM_UNDEPLOY_FAILED"
    """


    """
    STATE_VM_UNDEPLOY_SUCCESSFUL = "VM_UNDEPLOY_SUCCESSFUL"
    """


    """
    STATE_EDGE_CONFIG_ERROR = "EDGE_CONFIG_ERROR"
    """


    """
    STATE_VM_DEPLOYMENT_RESTARTED = "VM_DEPLOYMENT_RESTARTED"
    """


    """
    STATE_REGISTRATION_FAILED = "REGISTRATION_FAILED"
    """


    """
    STATE_TRANSPORT_NODE_SYNC_PENDING = "TRANSPORT_NODE_SYNC_PENDING"
    """


    """
    STATE_TRANSPORT_NODE_CONFIGURATION_MISSING = "TRANSPORT_NODE_CONFIGURATION_MISSING"
    """


    """
    STATE_EDGE_HARDWARE_NOT_SUPPORTED = "EDGE_HARDWARE_NOT_SUPPORTED"
    """


    """
    STATE_MULTIPLE_OVERLAY_TZS_NOT_SUPPORTED = "MULTIPLE_OVERLAY_TZS_NOT_SUPPORTED"
    """


    """
    STATE_TN_OVERLAY_TZ_IN_USE_BY_EDGE_CLUSTER = "TN_OVERLAY_TZ_IN_USE_BY_EDGE_CLUSTER"
    """


    """
    STATE_TZ_ENDPOINTS_NOT_SPECIFIED = "TZ_ENDPOINTS_NOT_SPECIFIED"
    """


    """
    STATE_NO_PNIC_PREPARED_IN_EDGE = "NO_PNIC_PREPARED_IN_EDGE"
    """


    """
    STATE_APPLIANCE_INTERNAL_ERROR = "APPLIANCE_INTERNAL_ERROR"
    """


    """
    STATE_VTEP_DHCP_NOT_SUPPORTED = "VTEP_DHCP_NOT_SUPPORTED"
    """


    """
    STATE_UNSUPPORTED_HOST_SWITCH_PROFILE = "UNSUPPORTED_HOST_SWITCH_PROFILE"
    """


    """
    STATE_UPLINK_HOST_SWITCH_PROFILE_NOT_SPECIFIED = "UPLINK_HOST_SWITCH_PROFILE_NOT_SPECIFIED"
    """


    """
    STATE_HOSTSWITCH_PROFILE_NOT_FOUND = "HOSTSWITCH_PROFILE_NOT_FOUND"
    """


    """
    STATE_LLDP_SEND_ENABLED_NOT_SUPPORTED = "LLDP_SEND_ENABLED_NOT_SUPPORTED"
    """


    """
    STATE_UNSUPPORTED_NAMED_TEAMING_POLICY = "UNSUPPORTED_NAMED_TEAMING_POLICY"
    """


    """
    STATE_LBSRCID_NOT_SUPPORTED_FOR_EDGE_VM = "LBSRCID_NOT_SUPPORTED_FOR_EDGE_VM"
    """


    """
    STATE_LACP_NOT_SUPPORTED_FOR_EDGE_VM = "LACP_NOT_SUPPORTED_FOR_EDGE_VM"
    """


    """
    STATE_STANDBY_UPLINKS_NOT_SUPPORTED_FOR_EDGE_VM = "STANDBY_UPLINKS_NOT_SUPPORTED_FOR_EDGE_VM"
    """


    """
    STATE_MULTIPLE_ACTIVE_UPLINKS_NOT_SUPPORTED_FOR_EDGE = "MULTIPLE_ACTIVE_UPLINKS_NOT_SUPPORTED_FOR_EDGE"
    """


    """
    STATE_UNSUPPORTED_LACP_LB_ALGO_FOR_NODE = "UNSUPPORTED_LACP_LB_ALGO_FOR_NODE"
    """


    """
    STATE_EDGE_NODE_VERSION_NOT_SUPPORTED = "EDGE_NODE_VERSION_NOT_SUPPORTED"
    """


    """
    STATE_NO_PNIC_SPECIFIED_IN_TN = "NO_PNIC_SPECIFIED_IN_TN"
    """


    """
    STATE_INVALID_PNIC_DEVICE_NAME = "INVALID_PNIC_DEVICE_NAME"
    """


    """
    STATE_TRANSPORT_NODE_READY = "TRANSPORT_NODE_READY"
    """


    """
    STATE_VM_NETWORK_EDIT_PENDING = "VM_NETWORK_EDIT_PENDING"
    """


    """
    STATE_UNSUPPORTED_DEFAULT_TEAMING_POLICY = "UNSUPPORTED_DEFAULT_TEAMING_POLICY"
    """


    """
    STATE_MPA_DISCONNECTED = "MPA_DISCONNECTED"
    """


    """
    STATE_VM_RENAME_PENDING = "VM_RENAME_PENDING"
    """


    """
    STATE_VM_CONFIG_EDIT_PENDING = "VM_CONFIG_EDIT_PENDING"
    """


    """
    STATE_VM_NETWORK_EDIT_FAILED = "VM_NETWORK_EDIT_FAILED"
    """


    """
    STATE_VM_RENAME_FAILED = "VM_RENAME_FAILED"
    """


    """
    STATE_VM_CONFIG_EDIT_FAILED = "VM_CONFIG_EDIT_FAILED"
    """


    """
    STATE_VM_CONFIG_DISCREPANCY = "VM_CONFIG_DISCREPANCY"
    """


    """
    STATE_VM_NODE_REFRESH_FAILED = "VM_NODE_REFRESH_FAILED"
    """


    """
    STATE_VM_PLACEMENT_REFRESH_FAILED = "VM_PLACEMENT_REFRESH_FAILED"
    """


    """
    STATE_REGISTRATION_TIMEDOUT = "REGISTRATION_TIMEDOUT"
    """


    """



    _canonical_to_pep_names = {
                            'details': 'details',
                            'failure_code': 'failure_code',
                            'failure_message': 'failure_message',
                            'state': 'state',
                            'pending_change_list': 'pending_change_list',
                            }

    def __init__(self,
                 details=None,
                 failure_code=None,
                 failure_message=None,
                 state=None,
                 pending_change_list=None,
                ):
        """
        :type  details: :class:`list` of :class:`ConfigurationStateElement` or ``None``
        :param details: Array of configuration state of various sub systems
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  failure_code: :class:`long` or ``None``
        :param failure_code: Error code format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  failure_message: :class:`str` or ``None``
        :param failure_message: Error message in case of failure
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  state: :class:`str` or ``None``
        :param state: Possible values are: 
            
            * :attr:`LogicalRouterState.STATE_PENDING`
            * :attr:`LogicalRouterState.STATE_IN_PROGRESS`
            * :attr:`LogicalRouterState.STATE_SUCCESS`
            * :attr:`LogicalRouterState.STATE_FAILED`
            * :attr:`LogicalRouterState.STATE_PARTIAL_SUCCESS`
            * :attr:`LogicalRouterState.STATE_ORPHANED`
            * :attr:`LogicalRouterState.STATE_UNKNOWN`
            * :attr:`LogicalRouterState.STATE_ERROR`
            * :attr:`LogicalRouterState.STATE_IN_SYNC`
            * :attr:`LogicalRouterState.STATE_NOT_AVAILABLE`
            * :attr:`LogicalRouterState.STATE_VM_DEPLOYMENT_QUEUED`
            * :attr:`LogicalRouterState.STATE_VM_DEPLOYMENT_IN_PROGRESS`
            * :attr:`LogicalRouterState.STATE_VM_DEPLOYMENT_FAILED`
            * :attr:`LogicalRouterState.STATE_VM_POWER_ON_IN_PROGRESS`
            * :attr:`LogicalRouterState.STATE_VM_POWER_ON_FAILED`
            * :attr:`LogicalRouterState.STATE_REGISTRATION_PENDING`
            * :attr:`LogicalRouterState.STATE_NODE_NOT_READY`
            * :attr:`LogicalRouterState.STATE_NODE_READY`
            * :attr:`LogicalRouterState.STATE_VM_POWER_OFF_IN_PROGRESS`
            * :attr:`LogicalRouterState.STATE_VM_POWER_OFF_FAILED`
            * :attr:`LogicalRouterState.STATE_VM_UNDEPLOY_IN_PROGRESS`
            * :attr:`LogicalRouterState.STATE_VM_UNDEPLOY_FAILED`
            * :attr:`LogicalRouterState.STATE_VM_UNDEPLOY_SUCCESSFUL`
            * :attr:`LogicalRouterState.STATE_EDGE_CONFIG_ERROR`
            * :attr:`LogicalRouterState.STATE_VM_DEPLOYMENT_RESTARTED`
            * :attr:`LogicalRouterState.STATE_REGISTRATION_FAILED`
            * :attr:`LogicalRouterState.STATE_TRANSPORT_NODE_SYNC_PENDING`
            *
              :attr:`LogicalRouterState.STATE_TRANSPORT_NODE_CONFIGURATION_MISSING`
            * :attr:`LogicalRouterState.STATE_EDGE_HARDWARE_NOT_SUPPORTED`
            *
              :attr:`LogicalRouterState.STATE_MULTIPLE_OVERLAY_TZS_NOT_SUPPORTED`
            *
              :attr:`LogicalRouterState.STATE_TN_OVERLAY_TZ_IN_USE_BY_EDGE_CLUSTER`
            * :attr:`LogicalRouterState.STATE_TZ_ENDPOINTS_NOT_SPECIFIED`
            * :attr:`LogicalRouterState.STATE_NO_PNIC_PREPARED_IN_EDGE`
            * :attr:`LogicalRouterState.STATE_APPLIANCE_INTERNAL_ERROR`
            * :attr:`LogicalRouterState.STATE_VTEP_DHCP_NOT_SUPPORTED`
            * :attr:`LogicalRouterState.STATE_UNSUPPORTED_HOST_SWITCH_PROFILE`
            *
              :attr:`LogicalRouterState.STATE_UPLINK_HOST_SWITCH_PROFILE_NOT_SPECIFIED`
            * :attr:`LogicalRouterState.STATE_HOSTSWITCH_PROFILE_NOT_FOUND`
            * :attr:`LogicalRouterState.STATE_LLDP_SEND_ENABLED_NOT_SUPPORTED`
            * :attr:`LogicalRouterState.STATE_UNSUPPORTED_NAMED_TEAMING_POLICY`
            *
              :attr:`LogicalRouterState.STATE_LBSRCID_NOT_SUPPORTED_FOR_EDGE_VM`
            * :attr:`LogicalRouterState.STATE_LACP_NOT_SUPPORTED_FOR_EDGE_VM`
            *
              :attr:`LogicalRouterState.STATE_STANDBY_UPLINKS_NOT_SUPPORTED_FOR_EDGE_VM`
            *
              :attr:`LogicalRouterState.STATE_MULTIPLE_ACTIVE_UPLINKS_NOT_SUPPORTED_FOR_EDGE`
            *
              :attr:`LogicalRouterState.STATE_UNSUPPORTED_LACP_LB_ALGO_FOR_NODE`
            * :attr:`LogicalRouterState.STATE_EDGE_NODE_VERSION_NOT_SUPPORTED`
            * :attr:`LogicalRouterState.STATE_NO_PNIC_SPECIFIED_IN_TN`
            * :attr:`LogicalRouterState.STATE_INVALID_PNIC_DEVICE_NAME`
            * :attr:`LogicalRouterState.STATE_TRANSPORT_NODE_READY`
            * :attr:`LogicalRouterState.STATE_VM_NETWORK_EDIT_PENDING`
            *
              :attr:`LogicalRouterState.STATE_UNSUPPORTED_DEFAULT_TEAMING_POLICY`
            * :attr:`LogicalRouterState.STATE_MPA_DISCONNECTED`
            * :attr:`LogicalRouterState.STATE_VM_RENAME_PENDING`
            * :attr:`LogicalRouterState.STATE_VM_CONFIG_EDIT_PENDING`
            * :attr:`LogicalRouterState.STATE_VM_NETWORK_EDIT_FAILED`
            * :attr:`LogicalRouterState.STATE_VM_RENAME_FAILED`
            * :attr:`LogicalRouterState.STATE_VM_CONFIG_EDIT_FAILED`
            * :attr:`LogicalRouterState.STATE_VM_CONFIG_DISCREPANCY`
            * :attr:`LogicalRouterState.STATE_VM_NODE_REFRESH_FAILED`
            * :attr:`LogicalRouterState.STATE_VM_PLACEMENT_REFRESH_FAILED`
            * :attr:`LogicalRouterState.STATE_REGISTRATION_TIMEDOUT`
            
            Gives details of state of desired configuration. Additional enums
            with more details on progress/success/error states are sent for
            edge node. The success states are NODE_READY and
            TRANSPORT_NODE_READY, pending states are {VM_DEPLOYMENT_QUEUED,
            VM_DEPLOYMENT_IN_PROGRESS, REGISTRATION_PENDING} and other values
            indicate failures. \"in_sync\" state indicates that the desired
            configuration has been received by the host to which it applies,
            but is not yet in effect. When the configuration is actually in
            effect, the state will change to \"success\". Please note, failed
            state is deprecated.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  pending_change_list: :class:`list` of :class:`str` or ``None``
        :param pending_change_list: Request identifier of the API which modified the entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.details = details
        self.failure_code = failure_code
        self.failure_message = failure_message
        self.state = state
        self.pending_change_list = pending_change_list
        VapiStruct.__init__(self)


LogicalRouterState._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.logical_router_state', {
        'details': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ConfigurationStateElement'))),
        'failure_code': type.OptionalType(type.IntegerType()),
        'failure_message': type.OptionalType(type.StringType()),
        'state': type.OptionalType(type.StringType()),
        'pending_change_list': type.OptionalType(type.ListType(type.StringType())),
    },
    LogicalRouterState,
    False,
    None))



class LogicalRouterStatus(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    LOCALE_OPERATION_MODE_PRIMARY_LOCATION = "PRIMARY_LOCATION"
    """


    """
    LOCALE_OPERATION_MODE_SECONDARY_LOCATION = "SECONDARY_LOCATION"
    """


    """



    _canonical_to_pep_names = {
                            'last_update_timestamp': 'last_update_timestamp',
                            'locale_operation_mode': 'locale_operation_mode',
                            'logical_router_id': 'logical_router_id',
                            'per_node_status': 'per_node_status',
                            }

    def __init__(self,
                 last_update_timestamp=None,
                 locale_operation_mode=None,
                 logical_router_id=None,
                 per_node_status=None,
                ):
        """
        :type  last_update_timestamp: :class:`long` or ``None``
        :param last_update_timestamp: Timestamp when the data was last updated; unset if data source has
            never updated the data. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  locale_operation_mode: :class:`str` or ``None``
        :param locale_operation_mode: Possible values are: 
            
            *
              :attr:`LogicalRouterStatus.LOCALE_OPERATION_MODE_PRIMARY_LOCATION`
            *
              :attr:`LogicalRouterStatus.LOCALE_OPERATION_MODE_SECONDARY_LOCATION`
            
             Egress mode for the logical router at given mode
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  logical_router_id: :class:`str` or ``None``
        :param logical_router_id: The id of the logical router
        :type  per_node_status: :class:`list` of :class:`LogicalRouterStatusPerNode` or ``None``
        :param per_node_status: Per Node Status
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.last_update_timestamp = last_update_timestamp
        self.locale_operation_mode = locale_operation_mode
        self.logical_router_id = logical_router_id
        self.per_node_status = per_node_status
        VapiStruct.__init__(self)


LogicalRouterStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.logical_router_status', {
        'last_update_timestamp': type.OptionalType(type.IntegerType()),
        'locale_operation_mode': type.OptionalType(type.StringType()),
        'logical_router_id': type.OptionalType(type.StringType()),
        'per_node_status': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'LogicalRouterStatusPerNode'))),
    },
    LogicalRouterStatus,
    False,
    None))



class LogicalRouterStatusPerNode(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    HIGH_AVAILABILITY_STATUS_ACTIVE = "ACTIVE"
    """


    """
    HIGH_AVAILABILITY_STATUS_STANDBY = "STANDBY"
    """


    """
    HIGH_AVAILABILITY_STATUS_DOWN = "DOWN"
    """


    """
    HIGH_AVAILABILITY_STATUS_SYNC = "SYNC"
    """


    """
    HIGH_AVAILABILITY_STATUS_UNKNOWN = "UNKNOWN"
    """


    """
    HIGH_AVAILABILITY_STATUS_ADMIN_DOWN = "ADMIN_DOWN"
    """


    """



    _canonical_to_pep_names = {
                            'high_availability_status': 'high_availability_status',
                            'service_router_id': 'service_router_id',
                            'transport_node_id': 'transport_node_id',
                            }

    def __init__(self,
                 high_availability_status=None,
                 service_router_id=None,
                 transport_node_id=None,
                ):
        """
        :type  high_availability_status: :class:`str` or ``None``
        :param high_availability_status: Possible values are: 
            
            *
              :attr:`LogicalRouterStatusPerNode.HIGH_AVAILABILITY_STATUS_ACTIVE`
            *
              :attr:`LogicalRouterStatusPerNode.HIGH_AVAILABILITY_STATUS_STANDBY`
            * :attr:`LogicalRouterStatusPerNode.HIGH_AVAILABILITY_STATUS_DOWN`
            * :attr:`LogicalRouterStatusPerNode.HIGH_AVAILABILITY_STATUS_SYNC`
            *
              :attr:`LogicalRouterStatusPerNode.HIGH_AVAILABILITY_STATUS_UNKNOWN`
            *
              :attr:`LogicalRouterStatusPerNode.HIGH_AVAILABILITY_STATUS_ADMIN_DOWN`
            
             A service router's HA status on an edge node
        :type  service_router_id: :class:`str` or ``None``
        :param service_router_id: id of the service router where the router status is retrieved.
        :type  transport_node_id: :class:`str` or ``None``
        :param transport_node_id: id of the transport node where the router status is retrieved.
        """
        self.high_availability_status = high_availability_status
        self.service_router_id = service_router_id
        self.transport_node_id = transport_node_id
        VapiStruct.__init__(self)


LogicalRouterStatusPerNode._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.logical_router_status_per_node', {
        'high_availability_status': type.OptionalType(type.StringType()),
        'service_router_id': type.OptionalType(type.StringType()),
        'transport_node_id': type.OptionalType(type.StringType()),
    },
    LogicalRouterStatusPerNode,
    False,
    None))



class LogicalSwitchStatistics(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'rx_bytes': 'rx_bytes',
                            'rx_packets': 'rx_packets',
                            'tx_bytes': 'tx_bytes',
                            'tx_packets': 'tx_packets',
                            'dropped_by_security_packets': 'dropped_by_security_packets',
                            'mac_learning': 'mac_learning',
                            'last_update_timestamp': 'last_update_timestamp',
                            'logical_switch_id': 'logical_switch_id',
                            }

    def __init__(self,
                 rx_bytes=None,
                 rx_packets=None,
                 tx_bytes=None,
                 tx_packets=None,
                 dropped_by_security_packets=None,
                 mac_learning=None,
                 last_update_timestamp=None,
                 logical_switch_id=None,
                ):
        """
        :type  rx_bytes: :class:`DataCounter` or ``None``
        :param rx_bytes: 
        :type  rx_packets: :class:`DataCounter` or ``None``
        :param rx_packets: 
        :type  tx_bytes: :class:`DataCounter` or ``None``
        :param tx_bytes: 
        :type  tx_packets: :class:`DataCounter` or ``None``
        :param tx_packets: 
        :type  dropped_by_security_packets: :class:`PacketsDroppedBySecurity` or ``None``
        :param dropped_by_security_packets: 
        :type  mac_learning: :class:`MacLearningCounters` or ``None``
        :param mac_learning: 
        :type  last_update_timestamp: :class:`long` or ``None``
        :param last_update_timestamp: Timestamp when the data was last updated; unset if data source has
            never updated the data. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  logical_switch_id: :class:`str` or ``None``
        :param logical_switch_id: The id of the logical Switch
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.rx_bytes = rx_bytes
        self.rx_packets = rx_packets
        self.tx_bytes = tx_bytes
        self.tx_packets = tx_packets
        self.dropped_by_security_packets = dropped_by_security_packets
        self.mac_learning = mac_learning
        self.last_update_timestamp = last_update_timestamp
        self.logical_switch_id = logical_switch_id
        VapiStruct.__init__(self)


LogicalSwitchStatistics._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.logical_switch_statistics', {
        'rx_bytes': type.OptionalType(type.ReferenceType(__name__, 'DataCounter')),
        'rx_packets': type.OptionalType(type.ReferenceType(__name__, 'DataCounter')),
        'tx_bytes': type.OptionalType(type.ReferenceType(__name__, 'DataCounter')),
        'tx_packets': type.OptionalType(type.ReferenceType(__name__, 'DataCounter')),
        'dropped_by_security_packets': type.OptionalType(type.ReferenceType(__name__, 'PacketsDroppedBySecurity')),
        'mac_learning': type.OptionalType(type.ReferenceType(__name__, 'MacLearningCounters')),
        'last_update_timestamp': type.OptionalType(type.IntegerType()),
        'logical_switch_id': type.OptionalType(type.StringType()),
    },
    LogicalSwitchStatistics,
    False,
    None))



class MACAddressExpression(VapiStruct):
    """
    Represents MAC address expressions in the form of an array, to support
    addition of MAC addresses in a group. Avoid creating groups with multiple
    MACAddressExpression. In future releases, group will be restricted to
    contain a single MACAddressExpression. To group MAC addresses, use nested
    groups instead of multiple MACAddressExpression.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "MACAddressExpression"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'mac_addresses': 'mac_addresses',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            }

    def __init__(self,
                 mac_addresses=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='MACAddressExpression',
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                ):
        """
        :type  mac_addresses: :class:`list` of :class:`str` or ``None``
        :param mac_addresses: This array can consist of one or more MAC addresses. format:
            mac-address
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`Expression.RESOURCE_TYPE_CONDITION`
            * :attr:`Expression.RESOURCE_TYPE_CONJUNCTIONOPERATOR`
            * :attr:`Expression.RESOURCE_TYPE_NESTEDEXPRESSION`
            * :attr:`Expression.RESOURCE_TYPE_IPADDRESSEXPRESSION`
            * :attr:`Expression.RESOURCE_TYPE_MACADDRESSEXPRESSION`
            * :attr:`Expression.RESOURCE_TYPE_EXTERNALIDEXPRESSION`
            * :attr:`Expression.RESOURCE_TYPE_PATHEXPRESSION`
            * :attr:`Expression.RESOURCE_TYPE_IDENTITYGROUPEXPRESSION`
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.mac_addresses = mac_addresses
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

MACAddressExpression._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.MAC_address_expression', {
        'mac_addresses': type.OptionalType(type.ListType(type.StringType())),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
    },
    MACAddressExpression,
    False,
    None))



class MACAddressList(VapiStruct):
    """
    List of MAC Addresses.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'mac_addresses': 'mac_addresses',
                            }

    def __init__(self,
                 mac_addresses=None,
                ):
        """
        :type  mac_addresses: :class:`list` of :class:`str` or ``None``
        :param mac_addresses: The array contains MAC addresses. format: mac-address
        """
        self.mac_addresses = mac_addresses
        VapiStruct.__init__(self)


MACAddressList._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.MAC_address_list', {
        'mac_addresses': type.OptionalType(type.ListType(type.StringType())),
    },
    MACAddressList,
    False,
    None))



class MacDiscoveryProfile(VapiStruct):
    """
    Mac Discovery Profile

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    MAC_LIMIT_POLICY_ALLOW = "ALLOW"
    """


    """
    MAC_LIMIT_POLICY_DROP = "DROP"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'mac_change_enabled': 'mac_change_enabled',
                            'mac_learning_aging_time': 'mac_learning_aging_time',
                            'mac_learning_enabled': 'mac_learning_enabled',
                            'mac_limit': 'mac_limit',
                            'mac_limit_policy': 'mac_limit_policy',
                            'remote_overlay_mac_limit': 'remote_overlay_mac_limit',
                            'unknown_unicast_flooding_enabled': 'unknown_unicast_flooding_enabled',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 mac_change_enabled=None,
                 mac_learning_aging_time=None,
                 mac_learning_enabled=None,
                 mac_limit=None,
                 mac_limit_policy=None,
                 remote_overlay_mac_limit=None,
                 unknown_unicast_flooding_enabled=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  mac_change_enabled: :class:`bool` or ``None``
        :param mac_change_enabled: Allowing source MAC address change
        :type  mac_learning_aging_time: :class:`long` or ``None``
        :param mac_learning_aging_time: Indicates how long learned MAC address remain. format: int32
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  mac_learning_enabled: :class:`bool` or ``None``
        :param mac_learning_enabled: Allowing source MAC address learning
        :type  mac_limit: :class:`long` or ``None``
        :param mac_limit: The maximum number of MAC addresses that can be learned on this
            port format: int32
        :type  mac_limit_policy: :class:`str` or ``None``
        :param mac_limit_policy: Possible values are: 
            
            * :attr:`MacDiscoveryProfile.MAC_LIMIT_POLICY_ALLOW`
            * :attr:`MacDiscoveryProfile.MAC_LIMIT_POLICY_DROP`
            
             The policy after MAC Limit is exceeded
        :type  remote_overlay_mac_limit: :class:`long` or ``None``
        :param remote_overlay_mac_limit: This property specifies the limit on the maximum number of MACs
            learned for a remote virtual machine's MAC to VTEP binding per
            overlay logical switch. format: int32
        :type  unknown_unicast_flooding_enabled: :class:`bool` or ``None``
        :param unknown_unicast_flooding_enabled: Allowing flooding for unlearned MAC for ingress traffic
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.mac_change_enabled = mac_change_enabled
        self.mac_learning_aging_time = mac_learning_aging_time
        self.mac_learning_enabled = mac_learning_enabled
        self.mac_limit = mac_limit
        self.mac_limit_policy = mac_limit_policy
        self.remote_overlay_mac_limit = remote_overlay_mac_limit
        self.unknown_unicast_flooding_enabled = unknown_unicast_flooding_enabled
        VapiStruct.__init__(self)


MacDiscoveryProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.mac_discovery_profile', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'mac_change_enabled': type.OptionalType(type.BooleanType()),
        'mac_learning_aging_time': type.OptionalType(type.IntegerType()),
        'mac_learning_enabled': type.OptionalType(type.BooleanType()),
        'mac_limit': type.OptionalType(type.IntegerType()),
        'mac_limit_policy': type.OptionalType(type.StringType()),
        'remote_overlay_mac_limit': type.OptionalType(type.IntegerType()),
        'unknown_unicast_flooding_enabled': type.OptionalType(type.BooleanType()),
    },
    MacDiscoveryProfile,
    False,
    None))



class MacDiscoveryProfileListResult(VapiStruct):
    """
    Paged collection of Mac Discovery Profiles

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`MacDiscoveryProfile` or ``None``
        :param results: Mac Discovery profile list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


MacDiscoveryProfileListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.mac_discovery_profile_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'MacDiscoveryProfile'))),
    },
    MacDiscoveryProfileListResult,
    False,
    None))



class MacLearningCounters(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'mac_not_learned_packets_allowed': 'mac_not_learned_packets_allowed',
                            'mac_not_learned_packets_dropped': 'mac_not_learned_packets_dropped',
                            'macs_learned': 'macs_learned',
                            }

    def __init__(self,
                 mac_not_learned_packets_allowed=None,
                 mac_not_learned_packets_dropped=None,
                 macs_learned=None,
                ):
        """
        :type  mac_not_learned_packets_allowed: :class:`long` or ``None``
        :param mac_not_learned_packets_allowed: The number of packets with unknown source MAC address that are
            dispatched without learning the source MAC address. Applicable only
            when the MAC limit is reached and MAC Limit policy is
            MAC_LEARNING_LIMIT_POLICY_ALLOW. format: int64
        :type  mac_not_learned_packets_dropped: :class:`long` or ``None``
        :param mac_not_learned_packets_dropped: The number of packets with unknown source MAC address that are
            dropped without learning the source MAC address. Applicable only
            when the MAC limit is reached and MAC Limit policy is
            MAC_LEARNING_LIMIT_POLICY_DROP. format: int64
        :type  macs_learned: :class:`long` or ``None``
        :param macs_learned: Number of MACs learned format: int64
        """
        self.mac_not_learned_packets_allowed = mac_not_learned_packets_allowed
        self.mac_not_learned_packets_dropped = mac_not_learned_packets_dropped
        self.macs_learned = macs_learned
        VapiStruct.__init__(self)


MacLearningCounters._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.mac_learning_counters', {
        'mac_not_learned_packets_allowed': type.OptionalType(type.IntegerType()),
        'mac_not_learned_packets_dropped': type.OptionalType(type.IntegerType()),
        'macs_learned': type.OptionalType(type.IntegerType()),
    },
    MacLearningCounters,
    False,
    None))



class ManagedResource(VapiStruct):
    """
    Base type for resources that are managed by API clients

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        VapiStruct.__init__(self)


ManagedResource._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.managed_resource', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
    },
    ManagedResource,
    False,
    None))



class ManagementConfig(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            'publish_fqdns': 'publish_fqdns',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 publish_fqdns=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  publish_fqdns: :class:`bool` or ``None``
        :param publish_fqdns: True if Management nodes publish their fqdns(instead of default IP
            addresses) across NSX for its reachability.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.publish_fqdns = publish_fqdns
        VapiStruct.__init__(self)


ManagementConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.management_config', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        'publish_fqdns': type.OptionalType(type.BooleanType()),
    },
    ManagementConfig,
    False,
    None))



class MetadataProxyConfig(VapiStruct):
    """
    Metadata Proxy Configuration

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    CRYPTO_PROTOCOLS_V1 = "TLS_V1"
    """


    """
    CRYPTO_PROTOCOLS_V1_1 = "TLS_V1_1"
    """


    """
    CRYPTO_PROTOCOLS_V1_2 = "TLS_V1_2"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'crypto_protocols': 'crypto_protocols',
                            'edge_cluster_path': 'edge_cluster_path',
                            'enable_standby_relocation': 'enable_standby_relocation',
                            'preferred_edge_paths': 'preferred_edge_paths',
                            'secret': 'secret',
                            'server_address': 'server_address',
                            'server_certificates': 'server_certificates',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 crypto_protocols=None,
                 edge_cluster_path=None,
                 enable_standby_relocation=None,
                 preferred_edge_paths=None,
                 secret=None,
                 server_address=None,
                 server_certificates=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  crypto_protocols: :class:`list` of :class:`str` or ``None``
        :param crypto_protocols: Possible values are: 
            
            * :attr:`MetadataProxyConfig.CRYPTO_PROTOCOLS_V1`
            * :attr:`MetadataProxyConfig.CRYPTO_PROTOCOLS_V1_1`
            * :attr:`MetadataProxyConfig.CRYPTO_PROTOCOLS_V1_2`
            
            The cryptographic protocols listed here are supported by the
            metadata proxy. TLSv1.1 and TLSv1.2 are supported by default
        :type  edge_cluster_path: :class:`str` or ``None``
        :param edge_cluster_path: Edge clusters configured on MP are auto-discovered by Policy and
            create corresponding read-only intent objects.
        :type  enable_standby_relocation: :class:`bool` or ``None``
        :param enable_standby_relocation: Only auto-placed metadata proxies are considered for relocation.
            Must be FALSE, when the preferred_edge_paths property is
            configured.
        :type  preferred_edge_paths: :class:`list` of :class:`str` or ``None``
        :param preferred_edge_paths: Edge nodes should be members of edge cluster configured in
            edge_cluster_path.
        :type  secret: :class:`str` or ``None``
        :param secret: Secret word or phrase to access metadata server.
        :type  server_address: :class:`str` or ``None``
        :param server_address: This field is a URL. Example formats - http://1.2.3.4:3888/path,
            http://text-md-proxy:5001/. Port number should be between
            3000-9000.
        :type  server_certificates: :class:`list` of :class:`str` or ``None``
        :param server_certificates: Valid certificates should be configured. The validity of
            certificates is not checked. Certificates are managed through
            /infra/certificates API on Policy.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.crypto_protocols = crypto_protocols
        self.edge_cluster_path = edge_cluster_path
        self.enable_standby_relocation = enable_standby_relocation
        self.preferred_edge_paths = preferred_edge_paths
        self.secret = secret
        self.server_address = server_address
        self.server_certificates = server_certificates
        VapiStruct.__init__(self)


MetadataProxyConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.metadata_proxy_config', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'crypto_protocols': type.OptionalType(type.ListType(type.StringType())),
        'edge_cluster_path': type.OptionalType(type.StringType()),
        'enable_standby_relocation': type.OptionalType(type.BooleanType()),
        'preferred_edge_paths': type.OptionalType(type.ListType(type.StringType())),
        'secret': type.OptionalType(type.StringType()),
        'server_address': type.OptionalType(type.StringType()),
        'server_certificates': type.OptionalType(type.ListType(type.StringType())),
    },
    MetadataProxyConfig,
    False,
    None))



class MetadataProxyConfigListResult(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`MetadataProxyConfig` or ``None``
        :param results: Paginated list of metadata proxy configurations
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


MetadataProxyConfigListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.metadata_proxy_config_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'MetadataProxyConfig'))),
    },
    MetadataProxyConfigListResult,
    False,
    None))



class MonitoringProfileBindingMap(VapiStruct):
    """
    Base Monitoring Profile Binding Map

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        VapiStruct.__init__(self)


MonitoringProfileBindingMap._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.monitoring_profile_binding_map', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
    },
    MonitoringProfileBindingMap,
    False,
    None))



class MultiWidgetConfiguration(VapiStruct):
    """
    Combines two or more widgetconfigurations into a multi-widget

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "MultiWidgetConfiguration"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'navigation': 'navigation',
                            'widgets': 'widgets',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'datasources': 'datasources',
                            'default_filter_value': 'default_filter_value',
                            'drilldown_id': 'drilldown_id',
                            'filter': 'filter',
                            'filter_value_required': 'filter_value_required',
                            'footer': 'footer',
                            'icons': 'icons',
                            'is_drilldown': 'is_drilldown',
                            'legend': 'legend',
                            'shared': 'shared',
                            'span': 'span',
                            'weight': 'weight',
                            }

    def __init__(self,
                 navigation=None,
                 widgets=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='MultiWidgetConfiguration',
                 tags=None,
                 datasources=None,
                 default_filter_value=None,
                 drilldown_id=None,
                 filter=None,
                 filter_value_required=None,
                 footer=None,
                 icons=None,
                 is_drilldown=None,
                 legend=None,
                 shared=None,
                 span=None,
                 weight=None,
                ):
        """
        :type  navigation: :class:`str` or ``None``
        :param navigation: Hyperlink of the specified UI page that provides details.
        :type  widgets: :class:`list` of :class:`WidgetItem` or ``None``
        :param widgets: Array of widgets that are part of the multi-widget.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Title of the widget. If display_name is omitted, the widget will be
            shown without a title.
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`WidgetConfiguration.RESOURCE_TYPE_LABELVALUECONFIGURATION`
            * :attr:`WidgetConfiguration.RESOURCE_TYPE_DONUTCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_MULTIWIDGETCONFIGURATION`
            * :attr:`WidgetConfiguration.RESOURCE_TYPE_CONTAINERCONFIGURATION`
            * :attr:`WidgetConfiguration.RESOURCE_TYPE_STATSCONFIGURATION`
            * :attr:`WidgetConfiguration.RESOURCE_TYPE_GRIDCONFIGURATION`
            * :attr:`WidgetConfiguration.RESOURCE_TYPE_GRAPHCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_CUSTOMWIDGETCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_DROPDOWNFILTERWIDGETCONFIGURATION`
            
            Supported visualization types are LabelValueConfiguration,
            DonutConfiguration, GridConfiguration, StatsConfiguration,
            MultiWidgetConfiguration, GraphConfiguration,
            ContainerConfiguration, CustomWidgetConfiguration and
            DropdownFilterWidgetConfiguration.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  datasources: :class:`list` of :class:`Datasource` or ``None``
        :param datasources: The 'datasources' represent the sources from which data will be
            fetched. Currently, only NSX-API is supported as a 'default'
            datasource. An example of specifying 'default' datasource along
            with the urls to fetch data from is given at 'example_request'
            section of 'CreateWidgetConfiguration' API.
        :type  default_filter_value: :class:`list` of :class:`DefaultFilterValue` or ``None``
        :param default_filter_value: Default filter values to be passed to datasources. This will be
            used when the report is requested without filter values.
        :type  drilldown_id: :class:`str` or ``None``
        :param drilldown_id: Id of drilldown widget, if any. Id should be a valid id of an
            existing widget. A widget is considered as drilldown widget when it
            is associated with any other widget and provides more detailed
            information about any data item from the parent widget.
        :type  filter: :class:`str` or ``None``
        :param filter: Id of filter widget for subscription, if any. Id should be a valid
            id of an existing filter widget. Filter widget should be from the
            same view. Datasource URLs should have placeholder values equal to
            filter alias to accept the filter value on filter change.
        :type  filter_value_required: :class:`bool` or ``None``
        :param filter_value_required: Flag to indicate that widget will continue to work without filter
            value. If this flag is set to false then default_filter_value is
            manadatory.
        :type  footer: :class:`Footer` or ``None``
        :param footer: 
        :type  icons: :class:`list` of :class:`Icon` or ``None``
        :param icons: Icons to be applied at dashboard for widgets and UI elements.
        :type  is_drilldown: :class:`bool` or ``None``
        :param is_drilldown: Set to true if this widget should be used as a drilldown.
        :type  legend: :class:`Legend` or ``None``
        :param legend: Legend to be displayed. If legend is not needed, do not include it.
        :type  shared: :class:`bool` or ``None``
        :param shared: Please use the property 'shared' of View instead of this. The
            widgets of a shared view are visible to other users.
        :type  span: :class:`long` or ``None``
        :param span: Represents the horizontal span of the widget / container. format:
            int32
        :type  weight: :class:`long` or ``None``
        :param weight: Specify relavite weight in WidgetItem for placement in a view.
            Please see WidgetItem for details. format: int32
        """
        self.navigation = navigation
        self.widgets = widgets
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.datasources = datasources
        self.default_filter_value = default_filter_value
        self.drilldown_id = drilldown_id
        self.filter = filter
        self.filter_value_required = filter_value_required
        self.footer = footer
        self.icons = icons
        self.is_drilldown = is_drilldown
        self.legend = legend
        self.shared = shared
        self.span = span
        self.weight = weight
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

MultiWidgetConfiguration._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.multi_widget_configuration', {
        'navigation': type.OptionalType(type.StringType()),
        'widgets': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'WidgetItem'))),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'datasources': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Datasource'))),
        'default_filter_value': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'DefaultFilterValue'))),
        'drilldown_id': type.OptionalType(type.StringType()),
        'filter': type.OptionalType(type.StringType()),
        'filter_value_required': type.OptionalType(type.BooleanType()),
        'footer': type.OptionalType(type.ReferenceType(__name__, 'Footer')),
        'icons': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Icon'))),
        'is_drilldown': type.OptionalType(type.BooleanType()),
        'legend': type.OptionalType(type.ReferenceType(__name__, 'Legend')),
        'shared': type.OptionalType(type.BooleanType()),
        'span': type.OptionalType(type.IntegerType()),
        'weight': type.OptionalType(type.IntegerType()),
    },
    MultiWidgetConfiguration,
    False,
    None))



class MulticastForwarding(VapiStruct):
    """
    Multicast forwarding entry.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'incoming_interface': 'incoming_interface',
                            'multicast_group': 'multicast_group',
                            'outgoing_interfaces': 'outgoing_interfaces',
                            'source': 'source',
                            }

    def __init__(self,
                 incoming_interface=None,
                 multicast_group=None,
                 outgoing_interfaces=None,
                 source=None,
                ):
        """
        :type  incoming_interface: :class:`MulticastForwardingInterface` or ``None``
        :param incoming_interface: Ingress interface on whic multicast traffic is learned.
        :type  multicast_group: :class:`str` or ``None``
        :param multicast_group: Multicast group address. format: ip
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  outgoing_interfaces: :class:`list` of :class:`MulticastForwardingInterface` or ``None``
        :param outgoing_interfaces: Array of egress interfaces on whic multicast traffic is forwarded.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  source: :class:`str` or ``None``
        :param source: Multicast source address. format: ip
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.incoming_interface = incoming_interface
        self.multicast_group = multicast_group
        self.outgoing_interfaces = outgoing_interfaces
        self.source = source
        VapiStruct.__init__(self)


MulticastForwarding._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.multicast_forwarding', {
        'incoming_interface': type.OptionalType(type.ReferenceType(__name__, 'MulticastForwardingInterface')),
        'multicast_group': type.OptionalType(type.StringType()),
        'outgoing_interfaces': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'MulticastForwardingInterface'))),
        'source': type.OptionalType(type.StringType()),
    },
    MulticastForwarding,
    False,
    None))



class MulticastForwardingCsvRecord(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'incoming_interface': 'incoming_interface',
                            'multicast_group': 'multicast_group',
                            'outgoing_interfaces': 'outgoing_interfaces',
                            'source': 'source',
                            'transport_node': 'transport_node',
                            }

    def __init__(self,
                 incoming_interface=None,
                 multicast_group=None,
                 outgoing_interfaces=None,
                 source=None,
                 transport_node=None,
                ):
        """
        :type  incoming_interface: :class:`str` or ``None``
        :param incoming_interface: Ingress interface on whic multicast traffic is learned.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  multicast_group: :class:`str` or ``None``
        :param multicast_group: Multicast group address. format: ip
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  outgoing_interfaces: :class:`str` or ``None``
        :param outgoing_interfaces: Array of egress interfaces on whic multicast traffic is forwarded.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  source: :class:`str` or ``None``
        :param source: Multicast source address. format: ip
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  transport_node: :class:`str` or ``None``
        :param transport_node: Transport node uuid or policy path.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.incoming_interface = incoming_interface
        self.multicast_group = multicast_group
        self.outgoing_interfaces = outgoing_interfaces
        self.source = source
        self.transport_node = transport_node
        VapiStruct.__init__(self)


MulticastForwardingCsvRecord._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.multicast_forwarding_csv_record', {
        'incoming_interface': type.OptionalType(type.StringType()),
        'multicast_group': type.OptionalType(type.StringType()),
        'outgoing_interfaces': type.OptionalType(type.StringType()),
        'source': type.OptionalType(type.StringType()),
        'transport_node': type.OptionalType(type.StringType()),
    },
    MulticastForwardingCsvRecord,
    False,
    None))



class MulticastForwardingInterface(VapiStruct):
    """
    Multicast forwarding interface details.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'ifuid': 'ifuid',
                            }

    def __init__(self,
                 ifuid=None,
                ):
        """
        :type  ifuid: :class:`str` or ``None``
        :param ifuid: Interface id.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.ifuid = ifuid
        VapiStruct.__init__(self)


MulticastForwardingInterface._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.multicast_forwarding_interface', {
        'ifuid': type.OptionalType(type.StringType()),
    },
    MulticastForwardingInterface,
    False,
    None))



class MulticastForwardingPerEdge(VapiStruct):
    """
    Multicast Forwarding Per Edge.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'edge_path': 'edge_path',
                            'mcast_forwarding': 'mcast_forwarding',
                            }

    def __init__(self,
                 edge_path=None,
                 mcast_forwarding=None,
                ):
        """
        :type  edge_path: :class:`str` or ``None``
        :param edge_path: Policy path to edge node.
        :type  mcast_forwarding: :class:`list` of :class:`MulticastForwarding` or ``None``
        :param mcast_forwarding: 
        """
        self.edge_path = edge_path
        self.mcast_forwarding = mcast_forwarding
        VapiStruct.__init__(self)


MulticastForwardingPerEdge._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.multicast_forwarding_per_edge', {
        'edge_path': type.OptionalType(type.StringType()),
        'mcast_forwarding': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'MulticastForwarding'))),
    },
    MulticastForwardingPerEdge,
    False,
    None))



class MulticastRoute(VapiStruct):
    """
    Multicast route details.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'group': 'group',
                            'input_interface': 'input_interface',
                            'output_interface': 'output_interface',
                            'source_address': 'source_address',
                            'ttl': 'ttl',
                            'uptime': 'uptime',
                            }

    def __init__(self,
                 group=None,
                 input_interface=None,
                 output_interface=None,
                 source_address=None,
                 ttl=None,
                 uptime=None,
                ):
        """
        :type  group: :class:`str` or ``None``
        :param group: Multicast group address. format: ip
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  input_interface: :class:`str` or ``None``
        :param input_interface: Ingress interface on which multicast traffic is learned.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  output_interface: :class:`str` or ``None``
        :param output_interface: Egress interface on which multicast traffic is forwarded.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  source_address: :class:`str` or ``None``
        :param source_address: Multicast source address. format: ip
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  ttl: :class:`long` or ``None``
        :param ttl: Time-to-live value for multicast packets. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  uptime: :class:`str` or ``None``
        :param uptime: Time for which multicast route entry is active.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.group = group
        self.input_interface = input_interface
        self.output_interface = output_interface
        self.source_address = source_address
        self.ttl = ttl
        self.uptime = uptime
        VapiStruct.__init__(self)


MulticastRoute._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.multicast_route', {
        'group': type.OptionalType(type.StringType()),
        'input_interface': type.OptionalType(type.StringType()),
        'output_interface': type.OptionalType(type.StringType()),
        'source_address': type.OptionalType(type.StringType()),
        'ttl': type.OptionalType(type.IntegerType()),
        'uptime': type.OptionalType(type.StringType()),
    },
    MulticastRoute,
    False,
    None))



class MulticastRouteCsvRecord(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'group': 'group',
                            'input_interface': 'input_interface',
                            'output_interface': 'output_interface',
                            'source_address': 'source_address',
                            'transport_node': 'transport_node',
                            'ttl': 'ttl',
                            'uptime': 'uptime',
                            }

    def __init__(self,
                 group=None,
                 input_interface=None,
                 output_interface=None,
                 source_address=None,
                 transport_node=None,
                 ttl=None,
                 uptime=None,
                ):
        """
        :type  group: :class:`str` or ``None``
        :param group: Multicast group address. format: ip
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  input_interface: :class:`str` or ``None``
        :param input_interface: Ingress interface on which multicast traffic is learned.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  output_interface: :class:`str` or ``None``
        :param output_interface: Egress interface on which multicast traffic is forwarded.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  source_address: :class:`str` or ``None``
        :param source_address: Multicast source address. format: ip
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  transport_node: :class:`str` or ``None``
        :param transport_node: Transport node uuid or policy path.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  ttl: :class:`long` or ``None``
        :param ttl: Time-to-live value for multicast packets. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  uptime: :class:`str` or ``None``
        :param uptime: Time for which multicast route entry is active.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.group = group
        self.input_interface = input_interface
        self.output_interface = output_interface
        self.source_address = source_address
        self.transport_node = transport_node
        self.ttl = ttl
        self.uptime = uptime
        VapiStruct.__init__(self)


MulticastRouteCsvRecord._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.multicast_route_csv_record', {
        'group': type.OptionalType(type.StringType()),
        'input_interface': type.OptionalType(type.StringType()),
        'output_interface': type.OptionalType(type.StringType()),
        'source_address': type.OptionalType(type.StringType()),
        'transport_node': type.OptionalType(type.StringType()),
        'ttl': type.OptionalType(type.IntegerType()),
        'uptime': type.OptionalType(type.StringType()),
    },
    MulticastRouteCsvRecord,
    False,
    None))



class MulticastRoutesPerEdge(VapiStruct):
    """
    Multicast Routes Per Edge.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'edge_path': 'edge_path',
                            'mcast_routes': 'mcast_routes',
                            }

    def __init__(self,
                 edge_path=None,
                 mcast_routes=None,
                ):
        """
        :type  edge_path: :class:`str` or ``None``
        :param edge_path: Policy path to edge node.
        :type  mcast_routes: :class:`list` of :class:`MulticastRoute` or ``None``
        :param mcast_routes: 
        """
        self.edge_path = edge_path
        self.mcast_routes = mcast_routes
        VapiStruct.__init__(self)


MulticastRoutesPerEdge._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.multicast_routes_per_edge', {
        'edge_path': type.OptionalType(type.StringType()),
        'mcast_routes': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'MulticastRoute'))),
    },
    MulticastRoutesPerEdge,
    False,
    None))



class NSXTConnectionInfo(VapiStruct):
    """
    Credential info to connect to an NSX-T type of enforcement point.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "NSXTConnectionInfo"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'edge_cluster_ids': 'edge_cluster_ids',
                            'password': 'password',
                            'thumbprint': 'thumbprint',
                            'transport_zone_ids': 'transport_zone_ids',
                            'username': 'username',
                            'enforcement_point_address': 'enforcement_point_address',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 edge_cluster_ids=None,
                 password=None,
                 thumbprint=None,
                 transport_zone_ids=None,
                 username=None,
                 enforcement_point_address=None,
                 resource_type='NSXTConnectionInfo',
                ):
        """
        :type  edge_cluster_ids: :class:`list` of :class:`str` or ``None``
        :param edge_cluster_ids: Edge Cluster UUIDs on enforcement point. Edge cluster information
            is required for creating logical L2, L3 constructs on enforcement
            point. Max 1 edge cluster ID. This is a deprecated property. The
            edge cluster id is now auto populated from enforcement point and
            its value can be read using APIs GET
            /infra/sites/site-id/enforcement-points/enforcementpoint-id/edge-clusters
            and GET
            /infra/sites/site-id/enforcement-points/enforcementpoint-1/edge-clusters/edge-cluster-id.
            The value passed through this property will be ignored.
        :type  password: :class:`str` or ``None``
        :param password: Password.
        :type  thumbprint: :class:`str` or ``None``
        :param thumbprint: Thumbprint of EnforcementPoint in the form of a SHA-256 hash
            represented in lower case HEX.
        :type  transport_zone_ids: :class:`list` of :class:`str` or ``None``
        :param transport_zone_ids: Transport Zone UUIDs on enforcement point. Transport zone
            information is required for creating logical L2, L3 constructs on
            enforcement point. Max 1 transport zone ID. This is a deprecated
            property. The transport zone id is now auto populated from
            enforcement point and its value can be read using APIs GET
            /infra/sites/site-id/enforcement-points/enforcementpoint-id/transport-zones
            and GET
            /infra/sites/site-id/enforcement-points/enforcementpoint-id/transport-zones/transport-zone-id.
            The value passed through this property will be ignored.
        :type  username: :class:`str` or ``None``
        :param username: Username.
        :type  enforcement_point_address: :class:`str` or ``None``
        :param enforcement_point_address: Value of this property could be Hostname or IP. For instance: - On
            an NSX-T MP running on default port, the value could be
            \"10.192.1.1\" - On an NSX-T MP running on custom port, the value
            could be \"192.168.1.1:32789\" - On an NSX-T MP in VMC deployments,
            the value could be \"192.168.1.1:5480/nsxapi\"
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`EnforcementPointConnectionInfo.RESOURCE_TYPE_NSXTCONNECTIONINFO`
            *
              :attr:`EnforcementPointConnectionInfo.RESOURCE_TYPE_NSXVCONNECTIONINFO`
            *
              :attr:`EnforcementPointConnectionInfo.RESOURCE_TYPE_CVXCONNECTIONINFO`
            
             Resource Type of Enforcement Point Connection Info.
        """
        self.edge_cluster_ids = edge_cluster_ids
        self.password = password
        self.thumbprint = thumbprint
        self.transport_zone_ids = transport_zone_ids
        self.username = username
        self.enforcement_point_address = enforcement_point_address
        self._resource_type = resource_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

NSXTConnectionInfo._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.NSXT_connection_info', {
        'edge_cluster_ids': type.OptionalType(type.ListType(type.StringType())),
        'password': type.OptionalType(type.StringType()),
        'thumbprint': type.OptionalType(type.StringType()),
        'transport_zone_ids': type.OptionalType(type.ListType(type.StringType())),
        'username': type.OptionalType(type.StringType()),
        'enforcement_point_address': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
    },
    NSXTConnectionInfo,
    False,
    None))



class NSXVConnectionInfo(VapiStruct):
    """
    Credential info to connect to an NSX-V type of enforcement point.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "NSXVConnectionInfo"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'password': 'password',
                            'thumbprint': 'thumbprint',
                            'username': 'username',
                            'enforcement_point_address': 'enforcement_point_address',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 password=None,
                 thumbprint=None,
                 username=None,
                 enforcement_point_address=None,
                 resource_type='NSXVConnectionInfo',
                ):
        """
        :type  password: :class:`str` or ``None``
        :param password: Password.
        :type  thumbprint: :class:`str` or ``None``
        :param thumbprint: Thumbprint of EnforcementPoint in the form of a SHA-256 hash
            represented in lower case HEX.
        :type  username: :class:`str` or ``None``
        :param username: Username.
        :type  enforcement_point_address: :class:`str` or ``None``
        :param enforcement_point_address: Value of this property could be Hostname or IP. For instance: - On
            an NSX-T MP running on default port, the value could be
            \"10.192.1.1\" - On an NSX-T MP running on custom port, the value
            could be \"192.168.1.1:32789\" - On an NSX-T MP in VMC deployments,
            the value could be \"192.168.1.1:5480/nsxapi\"
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`EnforcementPointConnectionInfo.RESOURCE_TYPE_NSXTCONNECTIONINFO`
            *
              :attr:`EnforcementPointConnectionInfo.RESOURCE_TYPE_NSXVCONNECTIONINFO`
            *
              :attr:`EnforcementPointConnectionInfo.RESOURCE_TYPE_CVXCONNECTIONINFO`
            
             Resource Type of Enforcement Point Connection Info.
        """
        self.password = password
        self.thumbprint = thumbprint
        self.username = username
        self.enforcement_point_address = enforcement_point_address
        self._resource_type = resource_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

NSXVConnectionInfo._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.NSXV_connection_info', {
        'password': type.OptionalType(type.StringType()),
        'thumbprint': type.OptionalType(type.StringType()),
        'username': type.OptionalType(type.StringType()),
        'enforcement_point_address': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
    },
    NSXVConnectionInfo,
    False,
    None))



class NdSnoopingConfig(VapiStruct):
    """
    Contains Neighbor Discovery Protocol (ND) snooping related configuration.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'nd_snooping_enabled': 'nd_snooping_enabled',
                            'nd_snooping_limit': 'nd_snooping_limit',
                            }

    def __init__(self,
                 nd_snooping_enabled=None,
                 nd_snooping_limit=None,
                ):
        """
        :type  nd_snooping_enabled: :class:`bool` or ``None``
        :param nd_snooping_enabled: Enable this method will snoop the NS (Neighbor Solicitation) and NA
            (Neighbor Advertisement) messages in the ND (Neighbor Discovery
            Protocol) family of messages which are transmitted by a VM. From
            the NS messages, we will learn about the source which sent this NS
            message. From the NA message, we will learn the resolved address in
            the message which the VM is a recipient of. Addresses snooped by
            this method are subject to TOFU (Trust on First Use) policies as
            enforced by the system.
        :type  nd_snooping_limit: :class:`long` or ``None``
        :param nd_snooping_limit: Maximum number of ND (Neighbor Discovery Protocol) snooped IPv6
            addresses format: int32
        """
        self.nd_snooping_enabled = nd_snooping_enabled
        self.nd_snooping_limit = nd_snooping_limit
        VapiStruct.__init__(self)


NdSnoopingConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.nd_snooping_config', {
        'nd_snooping_enabled': type.OptionalType(type.BooleanType()),
        'nd_snooping_limit': type.OptionalType(type.IntegerType()),
    },
    NdSnoopingConfig,
    False,
    None))



class NdpHeader(VapiStruct):
    """
    Neighbor discovery protocol header

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    MSG_TYPE_SOLICITATION = "NEIGHBOR_SOLICITATION"
    """


    """
    MSG_TYPE_ADVERTISEMENT = "NEIGHBOR_ADVERTISEMENT"
    """


    """



    _canonical_to_pep_names = {
                            'dst_ip': 'dst_ip',
                            'msg_type': 'msg_type',
                            }

    def __init__(self,
                 dst_ip=None,
                 msg_type=None,
                ):
        """
        :type  dst_ip: :class:`str` or ``None``
        :param dst_ip: The IP address of the destination of the solicitation. It MUST NOT
            be a multicast address. format: ipv6
        :type  msg_type: :class:`str` or ``None``
        :param msg_type: Possible values are: 
            
            * :attr:`NdpHeader.MSG_TYPE_SOLICITATION`
            * :attr:`NdpHeader.MSG_TYPE_ADVERTISEMENT`
            
            This field specifies the type of the Neighbor discover message
            being sent. NEIGHBOR_SOLICITATION - Neighbor Solicitation message
            to discover the link-layer address of an on-link IPv6 node or to
            confirm a previously determined link-layer address.
            NEIGHBOR_ADVERTISEMENT - Neighbor Advertisement message in response
            to a Neighbor Solicitation message.
        """
        self.dst_ip = dst_ip
        self.msg_type = msg_type
        VapiStruct.__init__(self)


NdpHeader._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ndp_header', {
        'dst_ip': type.OptionalType(type.StringType()),
        'msg_type': type.OptionalType(type.StringType()),
    },
    NdpHeader,
    False,
    None))



class NestedExpression(VapiStruct):
    """
    Nested expressions is a list of condition expressions that must follow the
    below criteria: 0. Only allowed expressions in a NestedExpression are
    Condition and ConjunctionOperator. 1. A non-empty expression list, must be
    of odd size. In a list, with indices starting from 0, all condition
    expressions must be at even indices, separated by the conjunction
    expressions AND at odd indices. 2. There may be at most 5 condition
    expressions inside a list. 3. NestedExpressions are homogeneous in nature,
    i.e, all expressions inside a nested expression must have the same member
    type.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "NestedExpression"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'expressions': 'expressions',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            }

    def __init__(self,
                 expressions=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='NestedExpression',
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                ):
        """
        :type  expressions: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param expressions: Expression.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`Expression`. When methods return a value of this class as a
            return value, the attribute will contain all the attributes defined
            in :class:`Expression`.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`Expression.RESOURCE_TYPE_CONDITION`
            * :attr:`Expression.RESOURCE_TYPE_CONJUNCTIONOPERATOR`
            * :attr:`Expression.RESOURCE_TYPE_NESTEDEXPRESSION`
            * :attr:`Expression.RESOURCE_TYPE_IPADDRESSEXPRESSION`
            * :attr:`Expression.RESOURCE_TYPE_MACADDRESSEXPRESSION`
            * :attr:`Expression.RESOURCE_TYPE_EXTERNALIDEXPRESSION`
            * :attr:`Expression.RESOURCE_TYPE_PATHEXPRESSION`
            * :attr:`Expression.RESOURCE_TYPE_IDENTITYGROUPEXPRESSION`
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.expressions = expressions
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

NestedExpression._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.nested_expression', {
        'expressions': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'Expression')]))),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
    },
    NestedExpression,
    False,
    None))



class NestedServiceServiceEntry(VapiStruct):
    """
    A ServiceEntry that represents nesting service

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "NestedServiceServiceEntry"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'nested_service_path': 'nested_service_path',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            }

    def __init__(self,
                 nested_service_path=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='NestedServiceServiceEntry',
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                ):
        """
        :type  nested_service_path: :class:`str` or ``None``
        :param nested_service_path: path of nested service
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`ServiceEntry.RESOURCE_TYPE_IPPROTOCOLSERVICEENTRY`
            * :attr:`ServiceEntry.RESOURCE_TYPE_IGMPTYPESERVICEENTRY`
            * :attr:`ServiceEntry.RESOURCE_TYPE_ICMPTYPESERVICEENTRY`
            * :attr:`ServiceEntry.RESOURCE_TYPE_ALGTYPESERVICEENTRY`
            * :attr:`ServiceEntry.RESOURCE_TYPE_L4PORTSETSERVICEENTRY`
            * :attr:`ServiceEntry.RESOURCE_TYPE_ETHERTYPESERVICEENTRY`
            * :attr:`ServiceEntry.RESOURCE_TYPE_NESTEDSERVICESERVICEENTRY`
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.nested_service_path = nested_service_path
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

NestedServiceServiceEntry._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.nested_service_service_entry', {
        'nested_service_path': type.OptionalType(type.StringType()),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
    },
    NestedServiceServiceEntry,
    False,
    None))



class NetworkError(VapiStruct):
    """
    Network error related to container objects.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'error_code': 'error_code',
                            'error_message': 'error_message',
                            'spec': 'spec',
                            }

    def __init__(self,
                 error_code=None,
                 error_message=None,
                 spec=None,
                ):
        """
        :type  error_code: :class:`str` or ``None``
        :param error_code: Error code of network related error.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  error_message: :class:`str` or ``None``
        :param error_message: Detailed message of network related error.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  spec: :class:`str` or ``None``
        :param spec: Additional error information in json format.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.error_code = error_code
        self.error_message = error_message
        self.spec = spec
        VapiStruct.__init__(self)


NetworkError._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.network_error', {
        'error_code': type.OptionalType(type.StringType()),
        'error_message': type.OptionalType(type.StringType()),
        'spec': type.OptionalType(type.StringType()),
    },
    NetworkError,
    False,
    None))



class NicMetadata(VapiStruct):
    """
    Information on the Network interfaces present on the partner appliance that
    needs to be configured by the NSX Manager.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    INTERFACE_TYPE_MANAGEMENT = "MANAGEMENT"
    """


    """
    INTERFACE_TYPE_DATA1 = "DATA1"
    """


    """
    INTERFACE_TYPE_DATA2 = "DATA2"
    """


    """
    INTERFACE_TYPE_HA1 = "HA1"
    """


    """
    INTERFACE_TYPE_HA2 = "HA2"
    """


    """
    INTERFACE_TYPE_CONTROL = "CONTROL"
    """


    """
    TRANSPORTS_L2_BRIDGE = "L2_BRIDGE"
    """


    """
    TRANSPORTS_L3_ROUTED = "L3_ROUTED"
    """


    """
    TRANSPORTS_NSH = "NSH"
    """


    """



    _canonical_to_pep_names = {
                            'interface_index': 'interface_index',
                            'interface_label': 'interface_label',
                            'interface_type': 'interface_type',
                            'transports': 'transports',
                            'user_configurable': 'user_configurable',
                            }

    def __init__(self,
                 interface_index=None,
                 interface_label=None,
                 interface_type=None,
                 transports=None,
                 user_configurable=None,
                ):
        """
        :type  interface_index: :class:`long` or ``None``
        :param interface_index: Network Interface index. format: int64
        :type  interface_label: :class:`str` or ``None``
        :param interface_label: Network Interface label.
        :type  interface_type: :class:`str` or ``None``
        :param interface_type: Possible values are: 
            
            * :attr:`NicMetadata.INTERFACE_TYPE_MANAGEMENT`
            * :attr:`NicMetadata.INTERFACE_TYPE_DATA1`
            * :attr:`NicMetadata.INTERFACE_TYPE_DATA2`
            * :attr:`NicMetadata.INTERFACE_TYPE_HA1`
            * :attr:`NicMetadata.INTERFACE_TYPE_HA2`
            * :attr:`NicMetadata.INTERFACE_TYPE_CONTROL`
            
            Interface that needs to be configured on the partner appliance. Ex.
            MANAGEMENT, DATA1, DATA2, HA1, HA2, CONTROL.
        :type  transports: :class:`list` of :class:`str` or ``None``
        :param transports: Possible values are: 
            
            * :attr:`NicMetadata.TRANSPORTS_L2_BRIDGE`
            * :attr:`NicMetadata.TRANSPORTS_L3_ROUTED`
            * :attr:`NicMetadata.TRANSPORTS_NSH`
            
            Transport Type of the service, which is the mechanism of
            redirecting the traffic to the the partner appliance. Transport
            type is required if Service caters to any functionality other than
            EPP. Here, the transports array specifies the kinds of transport
            where this particular NIC is user configurable. If nothing is
            specified, and the \"user_configurable\" flag is true, then user
            configuration will be allowed for all transports. If any transport
            is/are specified, then it will be considered as user configurable
            for the specified transports only.\"
        :type  user_configurable: :class:`bool` or ``None``
        :param user_configurable: Used to specify if the given interface needs configuration.
            Management nics will always need the configuration, for others it
            will be use case specific. For example, a DATA NIC may be user
            configurable if the appliance is deployed in certain mode, such as
            L3_ROUTED.
        """
        self.interface_index = interface_index
        self.interface_label = interface_label
        self.interface_type = interface_type
        self.transports = transports
        self.user_configurable = user_configurable
        VapiStruct.__init__(self)


NicMetadata._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.nic_metadata', {
        'interface_index': type.OptionalType(type.IntegerType()),
        'interface_label': type.OptionalType(type.StringType()),
        'interface_type': type.OptionalType(type.StringType()),
        'transports': type.OptionalType(type.ListType(type.StringType())),
        'user_configurable': type.OptionalType(type.BooleanType()),
    },
    NicMetadata,
    False,
    None))



class NsxRole(VapiStruct):
    """
    Role

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    PERMISSIONS_READ_API = "read-api"
    """


    """
    PERMISSIONS_READ_WRITE_API = "read-write-api"
    """


    """
    PERMISSIONS_CRUD = "crud"
    """


    """
    PERMISSIONS_READ = "read"
    """


    """
    PERMISSIONS_EXECUTE = "execute"
    """


    """
    PERMISSIONS_NONE = "none"
    """


    """



    _canonical_to_pep_names = {
                            'permissions': 'permissions',
                            'role': 'role',
                            }

    def __init__(self,
                 permissions=None,
                 role=None,
                ):
        """
        :type  permissions: :class:`list` of :class:`str` or ``None``
        :param permissions: Possible values are: 
            
            * :attr:`NsxRole.PERMISSIONS_READ_API`
            * :attr:`NsxRole.PERMISSIONS_READ_WRITE_API`
            * :attr:`NsxRole.PERMISSIONS_CRUD`
            * :attr:`NsxRole.PERMISSIONS_READ`
            * :attr:`NsxRole.PERMISSIONS_EXECUTE`
            * :attr:`NsxRole.PERMISSIONS_NONE`
            
            Please use the /user-info/permissions api to get the permission
            that the user has on each feature.
        :type  role: :class:`str` or ``None``
        :param role: This field represents the identifier of the role. With the
            introduction of custom roles, this field is no longer an enum.
        """
        self.permissions = permissions
        self.role = role
        VapiStruct.__init__(self)


NsxRole._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.nsx_role', {
        'permissions': type.OptionalType(type.ListType(type.StringType())),
        'role': type.OptionalType(type.StringType()),
    },
    NsxRole,
    False,
    None))



class NsxTDNSForwarderStatistics(VapiStruct):
    """
    The current statistics counters of the DNS forwarder including cache usages
    and query numbers per forwarders, on an NSX-T type of enforcement point.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "NsxTDNSForwarderStatistics"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'cached_entries': 'cached_entries',
                            'conditional_forwarder_statistics': 'conditional_forwarder_statistics',
                            'configured_cache_size': 'configured_cache_size',
                            'default_forwarder_statistics': 'default_forwarder_statistics',
                            'queries_answered_locally': 'queries_answered_locally',
                            'queries_forwarded': 'queries_forwarded',
                            'timestamp': 'timestamp',
                            'total_queries': 'total_queries',
                            'used_cache_statistics': 'used_cache_statistics',
                            'enforcement_point_path': 'enforcement_point_path',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 cached_entries=None,
                 conditional_forwarder_statistics=None,
                 configured_cache_size=None,
                 default_forwarder_statistics=None,
                 queries_answered_locally=None,
                 queries_forwarded=None,
                 timestamp=None,
                 total_queries=None,
                 used_cache_statistics=None,
                 enforcement_point_path=None,
                 resource_type='NsxTDNSForwarderStatistics',
                ):
        """
        :type  cached_entries: :class:`long` or ``None``
        :param cached_entries: The total number of cached entries format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  conditional_forwarder_statistics: :class:`list` of :class:`NsxTDNSForwarderZoneStatistics` or ``None``
        :param conditional_forwarder_statistics: The statistics of conditional forwarder zones
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  configured_cache_size: :class:`long` or ``None``
        :param configured_cache_size: The configured cache size, in kb format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  default_forwarder_statistics: :class:`NsxTDNSForwarderZoneStatistics` or ``None``
        :param default_forwarder_statistics: The statistics of default forwarder zone
        :type  queries_answered_locally: :class:`long` or ``None``
        :param queries_answered_locally: The total number of queries answered from local cache format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  queries_forwarded: :class:`long` or ``None``
        :param queries_forwarded: The total number of forwarded DNS queries format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  timestamp: :class:`long` or ``None``
        :param timestamp: Time stamp of the current statistics, in ms format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  total_queries: :class:`long` or ``None``
        :param total_queries: The total number of received DNS queries format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  used_cache_statistics: :class:`list` of :class:`NsxtPerNodeUsedCacheStatistics` or ``None``
        :param used_cache_statistics: The statistics of used cache
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  enforcement_point_path: :class:`str` or ``None``
        :param enforcement_point_path: Policy path referencing the enforcement point from where the
            statistics are fetched.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`DNSForwarderStatisticsPerEnforcementPoint.RESOURCE_TYPE_NSXTDNSFORWARDERSTATISTICS`
        """
        self.cached_entries = cached_entries
        self.conditional_forwarder_statistics = conditional_forwarder_statistics
        self.configured_cache_size = configured_cache_size
        self.default_forwarder_statistics = default_forwarder_statistics
        self.queries_answered_locally = queries_answered_locally
        self.queries_forwarded = queries_forwarded
        self.timestamp = timestamp
        self.total_queries = total_queries
        self.used_cache_statistics = used_cache_statistics
        self.enforcement_point_path = enforcement_point_path
        self._resource_type = resource_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

NsxTDNSForwarderStatistics._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.nsx_TDNS_forwarder_statistics', {
        'cached_entries': type.OptionalType(type.IntegerType()),
        'conditional_forwarder_statistics': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'NsxTDNSForwarderZoneStatistics'))),
        'configured_cache_size': type.OptionalType(type.IntegerType()),
        'default_forwarder_statistics': type.OptionalType(type.ReferenceType(__name__, 'NsxTDNSForwarderZoneStatistics')),
        'queries_answered_locally': type.OptionalType(type.IntegerType()),
        'queries_forwarded': type.OptionalType(type.IntegerType()),
        'timestamp': type.OptionalType(type.IntegerType()),
        'total_queries': type.OptionalType(type.IntegerType()),
        'used_cache_statistics': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'NsxtPerNodeUsedCacheStatistics'))),
        'enforcement_point_path': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
    },
    NsxTDNSForwarderStatistics,
    False,
    None))



class NsxTDNSForwarderStatus(VapiStruct):
    """
    The current runtime status of the DNS forwarder.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "NsxTDNSForwarderStatus"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    STATUS_UP = "UP"
    """


    """
    STATUS_DOWN = "DOWN"
    """


    """
    STATUS_ERROR = "ERROR"
    """


    """
    STATUS_NO_BACKUP = "NO_BACKUP"
    """


    """
    STATUS_UNKNOWN = "UNKNOWN"
    """


    """



    _canonical_to_pep_names = {
                            'extra_message': 'extra_message',
                            'status': 'status',
                            'timestamp': 'timestamp',
                            'enforcement_point_path': 'enforcement_point_path',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 extra_message=None,
                 status=None,
                 timestamp=None,
                 enforcement_point_path=None,
                 resource_type='NsxTDNSForwarderStatus',
                ):
        """
        :type  extra_message: :class:`str` or ``None``
        :param extra_message: Extra message, if available
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  status: :class:`str` or ``None``
        :param status: Possible values are: 
            
            * :attr:`NsxTDNSForwarderStatus.STATUS_UP`
            * :attr:`NsxTDNSForwarderStatus.STATUS_DOWN`
            * :attr:`NsxTDNSForwarderStatus.STATUS_ERROR`
            * :attr:`NsxTDNSForwarderStatus.STATUS_NO_BACKUP`
            * :attr:`NsxTDNSForwarderStatus.STATUS_UNKNOWN`
            
            UP means the DNS forwarder is working correctly on the active
            transport node and the stand-by transport node (if present).
            Failover will occur if either node goes down. DOWN means the DNS
            forwarder is down on both active transport node and standby node
            (if present). The DNS forwarder does not function in this
            situation. Error means there is some error on one or both transport
            node, or no status was reported from one or both transport nodes.
            The DNS forwarder may be working (or not working). NO_BACKUP means
            DNS forwarder is working in only one transport node, either because
            it is down on the standby node, or no standby is configured. An
            forwarder outage will occur if the active node goes down.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  timestamp: :class:`long` or ``None``
        :param timestamp: Time stamp of the current status, in ms format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  enforcement_point_path: :class:`str` or ``None``
        :param enforcement_point_path: Policy path referencing the enforcement point from where the status
            is fetched.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`DNSForwarderStatusPerEnforcementPoint.RESOURCE_TYPE_NSXTDNSFORWARDERSTATUS`
        """
        self.extra_message = extra_message
        self.status = status
        self.timestamp = timestamp
        self.enforcement_point_path = enforcement_point_path
        self._resource_type = resource_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

NsxTDNSForwarderStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.nsx_TDNS_forwarder_status', {
        'extra_message': type.OptionalType(type.StringType()),
        'status': type.OptionalType(type.StringType()),
        'timestamp': type.OptionalType(type.IntegerType()),
        'enforcement_point_path': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
    },
    NsxTDNSForwarderStatus,
    False,
    None))



class NsxTDNSForwarderZoneStatistics(VapiStruct):
    """
    Statistics counters of the DNS forwarder zone.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'domain_names': 'domain_names',
                            'upstream_statistics': 'upstream_statistics',
                            }

    def __init__(self,
                 domain_names=None,
                 upstream_statistics=None,
                ):
        """
        :type  domain_names: :class:`list` of :class:`str` or ``None``
        :param domain_names: Domain names configured for the forwarder. Empty if this is the
            default forwarder.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  upstream_statistics: :class:`list` of :class:`NsxtUpstreamServerStatistics` or ``None``
        :param upstream_statistics: Statistics per upstream server.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.domain_names = domain_names
        self.upstream_statistics = upstream_statistics
        VapiStruct.__init__(self)


NsxTDNSForwarderZoneStatistics._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.nsx_TDNS_forwarder_zone_statistics', {
        'domain_names': type.OptionalType(type.ListType(type.StringType())),
        'upstream_statistics': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'NsxtUpstreamServerStatistics'))),
    },
    NsxTDNSForwarderZoneStatistics,
    False,
    None))



class NsxtDnsAnswer(VapiStruct):
    """
    Answer of dns nslookup

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "NsxTDnsAnswer"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'authoritative_answers': 'authoritative_answers',
                            'dns_server': 'dns_server',
                            'edge_node_id': 'edge_node_id',
                            'non_authoritative_answers': 'non_authoritative_answers',
                            'raw_answer': 'raw_answer',
                            'enforcement_point_path': 'enforcement_point_path',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 authoritative_answers=None,
                 dns_server=None,
                 edge_node_id=None,
                 non_authoritative_answers=None,
                 raw_answer=None,
                 enforcement_point_path=None,
                 resource_type='NsxTDnsAnswer',
                ):
        """
        :type  authoritative_answers: :class:`list` of :class:`NsxtDnsQueryAnswer` or ``None``
        :param authoritative_answers: Authoritative answers
        :type  dns_server: :class:`str` or ``None``
        :param dns_server: Dns server ip address and port, format is \"ip address#port\".
        :type  edge_node_id: :class:`str` or ``None``
        :param edge_node_id: ID of the edge node that performed the query.
        :type  non_authoritative_answers: :class:`list` of :class:`NsxtDnsQueryAnswer` or ``None``
        :param non_authoritative_answers: Non authoritative answers
        :type  raw_answer: :class:`str` or ``None``
        :param raw_answer: It can be NXDOMAIN or error message which is not consisted of
            authoritative_answer or non_authoritative_answer.
        :type  enforcement_point_path: :class:`str` or ``None``
        :param enforcement_point_path: Policy path referencing the enforcement point from where the DNS
            forwarder nslookup answer is fetched.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`PolicyDnsAnswerPerEnforcementPoint.RESOURCE_TYPE_NSXTDNSANSWER`
            
             Resource type of the DNS forwarder nslookup answer.
        """
        self.authoritative_answers = authoritative_answers
        self.dns_server = dns_server
        self.edge_node_id = edge_node_id
        self.non_authoritative_answers = non_authoritative_answers
        self.raw_answer = raw_answer
        self.enforcement_point_path = enforcement_point_path
        self._resource_type = resource_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

NsxtDnsAnswer._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.nsxt_dns_answer', {
        'authoritative_answers': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'NsxtDnsQueryAnswer'))),
        'dns_server': type.OptionalType(type.StringType()),
        'edge_node_id': type.OptionalType(type.StringType()),
        'non_authoritative_answers': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'NsxtDnsQueryAnswer'))),
        'raw_answer': type.OptionalType(type.StringType()),
        'enforcement_point_path': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
    },
    NsxtDnsAnswer,
    False,
    None))



class NsxtDnsQueryAnswer(VapiStruct):
    """
    Answer of nslookup

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'address': 'address',
                            'name': 'name',
                            }

    def __init__(self,
                 address=None,
                 name=None,
                ):
        """
        :type  address: :class:`str` or ``None``
        :param address: Resolved IP address matched with the nslookup address provided as a
            request parameter.
        :type  name: :class:`str` or ``None``
        :param name: Matched name of the given address.
        """
        self.address = address
        self.name = name
        VapiStruct.__init__(self)


NsxtDnsQueryAnswer._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.nsxt_dns_query_answer', {
        'address': type.OptionalType(type.StringType()),
        'name': type.OptionalType(type.StringType()),
    },
    NsxtDnsQueryAnswer,
    False,
    None))



class NsxtPerNodeUsedCacheStatistics(VapiStruct):
    """
    Query statistics counters of used cache from node

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'cached_entries': 'cached_entries',
                            'node_id': 'node_id',
                            'used_cache_size': 'used_cache_size',
                            }

    def __init__(self,
                 cached_entries=None,
                 node_id=None,
                 used_cache_size=None,
                ):
        """
        :type  cached_entries: :class:`long` or ``None``
        :param cached_entries: The total number of cached entries format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  node_id: :class:`str` or ``None``
        :param node_id: UUID of active/standby transport node
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  used_cache_size: :class:`long` or ``None``
        :param used_cache_size: The memory size used in cache, in kb format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.cached_entries = cached_entries
        self.node_id = node_id
        self.used_cache_size = used_cache_size
        VapiStruct.__init__(self)


NsxtPerNodeUsedCacheStatistics._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.nsxt_per_node_used_cache_statistics', {
        'cached_entries': type.OptionalType(type.IntegerType()),
        'node_id': type.OptionalType(type.StringType()),
        'used_cache_size': type.OptionalType(type.IntegerType()),
    },
    NsxtPerNodeUsedCacheStatistics,
    False,
    None))



class NsxtUpstreamServerStatistics(VapiStruct):
    """
    Query statistics counters to an upstream server including successfully
    forwarded queries and failed queries.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'queries_failed': 'queries_failed',
                            'queries_succeeded': 'queries_succeeded',
                            'upstream_server': 'upstream_server',
                            }

    def __init__(self,
                 queries_failed=None,
                 queries_succeeded=None,
                 upstream_server=None,
                ):
        """
        :type  queries_failed: :class:`long` or ``None``
        :param queries_failed: Queries failed to forward. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  queries_succeeded: :class:`long` or ``None``
        :param queries_succeeded: Queries forwarded successfully format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  upstream_server: :class:`str` or ``None``
        :param upstream_server: Upstream server ip format: ip
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.queries_failed = queries_failed
        self.queries_succeeded = queries_succeeded
        self.upstream_server = upstream_server
        VapiStruct.__init__(self)


NsxtUpstreamServerStatistics._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.nsxt_upstream_server_statistics', {
        'queries_failed': type.OptionalType(type.IntegerType()),
        'queries_succeeded': type.OptionalType(type.IntegerType()),
        'upstream_server': type.OptionalType(type.StringType()),
    },
    NsxtUpstreamServerStatistics,
    False,
    None))



class ObjectRolePermissionGroup(VapiStruct):
    """
    RBAC Objects qualifier

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    OPERATION_CRUD = "crud"
    """


    """
    OPERATION_READ = "read"
    """


    """
    OPERATION_EXECUTE = "execute"
    """


    """
    OPERATION_NONE = "none"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'inheritance_disabled': 'inheritance_disabled',
                            'operation': 'operation',
                            'path_prefix': 'path_prefix',
                            'role_name': 'role_name',
                            'rule_disabled': 'rule_disabled',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 inheritance_disabled=None,
                 operation=None,
                 path_prefix=None,
                 role_name=None,
                 rule_disabled=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  inheritance_disabled: :class:`bool` or ``None``
        :param inheritance_disabled: Does children of this object inherit this rule
        :type  operation: :class:`str` or ``None``
        :param operation: Possible values are: 
            
            * :attr:`ObjectRolePermissionGroup.OPERATION_CRUD`
            * :attr:`ObjectRolePermissionGroup.OPERATION_READ`
            * :attr:`ObjectRolePermissionGroup.OPERATION_EXECUTE`
            * :attr:`ObjectRolePermissionGroup.OPERATION_NONE`
            
             Allowed operation
        :type  path_prefix: :class:`str` or ``None``
        :param path_prefix: Path prefix
        :type  role_name: :class:`str` or ``None``
        :param role_name: Role name
        :type  rule_disabled: :class:`bool` or ``None``
        :param rule_disabled: Is rule disabled or not
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.inheritance_disabled = inheritance_disabled
        self.operation = operation
        self.path_prefix = path_prefix
        self.role_name = role_name
        self.rule_disabled = rule_disabled
        VapiStruct.__init__(self)


ObjectRolePermissionGroup._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.object_role_permission_group', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'inheritance_disabled': type.OptionalType(type.BooleanType()),
        'operation': type.OptionalType(type.StringType()),
        'path_prefix': type.OptionalType(type.StringType()),
        'role_name': type.OptionalType(type.StringType()),
        'rule_disabled': type.OptionalType(type.BooleanType()),
    },
    ObjectRolePermissionGroup,
    False,
    None))



class ObjectRolePermissionGroupListResult(VapiStruct):
    """
    Paged collection of RBAC Objects

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`ObjectRolePermissionGroup` or ``None``
        :param results: ObjectRolePermissionGroup list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


ObjectRolePermissionGroupListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.object_role_permission_group_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ObjectRolePermissionGroup'))),
    },
    ObjectRolePermissionGroupListResult,
    False,
    None))



class OpenLdapIdentitySource(VapiStruct):
    """
    An identity source service that runs OpenLDAP. The service allows selected
    user accounts defined in OpenLDAP to log into and access NSX-T.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "OpenLdapIdentitySource"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'alternative_domain_names': 'alternative_domain_names',
                            'base_dn': 'base_dn',
                            'domain_name': 'domain_name',
                            'ldap_servers': 'ldap_servers',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='OpenLdapIdentitySource',
                 tags=None,
                 alternative_domain_names=None,
                 base_dn=None,
                 domain_name=None,
                 ldap_servers=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`LdapIdentitySource.RESOURCE_TYPE_ACTIVEDIRECTORYIDENTITYSOURCE`
            * :attr:`LdapIdentitySource.RESOURCE_TYPE_OPENLDAPIDENTITYSOURCE`
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  alternative_domain_names: :class:`list` of :class:`str` or ``None``
        :param alternative_domain_names: After parsing the \"user\\\\@domain\", the domain portion is used
            to select the LDAP identity source to use. Additional domains
            listed here will also be directed to this LDAP identity source. In
            Active Directory these are sometimes referred to as Alternative UPN
            Suffixes.
        :type  base_dn: :class:`str` or ``None``
        :param base_dn: The subtree of the LDAP identity source to search when locating
            users and groups.
        :type  domain_name: :class:`str` or ``None``
        :param domain_name: The name of the authentication domain. When users log into NSX
            using an identity of the form \"user\\\\@domain\", NSX uses the
            domain portion to determine which LDAP identity source to use.
        :type  ldap_servers: :class:`list` of :class:`IdentitySourceLdapServer` or ``None``
        :param ldap_servers: The list of LDAP servers that provide LDAP service for this
            identity source. Currently, only one LDAP server is supported.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.alternative_domain_names = alternative_domain_names
        self.base_dn = base_dn
        self.domain_name = domain_name
        self.ldap_servers = ldap_servers
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

OpenLdapIdentitySource._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.open_ldap_identity_source', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'alternative_domain_names': type.OptionalType(type.ListType(type.StringType())),
        'base_dn': type.OptionalType(type.StringType()),
        'domain_name': type.OptionalType(type.StringType()),
        'ldap_servers': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'IdentitySourceLdapServer'))),
    },
    OpenLdapIdentitySource,
    False,
    None))



class OverriddenResource(VapiStruct):
    """
    Represents which federated global resources have been overrriden on a
    specific Site.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'intent_path': 'intent_path',
                            'site_path': 'site_path',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 intent_path=None,
                 site_path=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  intent_path: :class:`str` or ``None``
        :param intent_path: Policy resource path of the overridden resource.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  site_path: :class:`str` or ``None``
        :param site_path: Site path to the specific site that has overridden the global
            resource.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.intent_path = intent_path
        self.site_path = site_path
        VapiStruct.__init__(self)


OverriddenResource._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.overridden_resource', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'intent_path': type.OptionalType(type.StringType()),
        'site_path': type.OptionalType(type.StringType()),
    },
    OverriddenResource,
    False,
    None))



class OverriddenResourceListResult(VapiStruct):
    """
    Paged Collection of OverriddenResource.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`OverriddenResource` or ``None``
        :param results: OverriddenResource list results.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


OverriddenResourceListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.overridden_resource_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'OverriddenResource'))),
    },
    OverriddenResourceListResult,
    False,
    None))



class PacketData(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "PacketData"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    RESOURCE_TYPE_BINARYPACKETDATA = "BinaryPacketData"
    """


    """
    RESOURCE_TYPE_FIELDSPACKETDATA = "FieldsPacketData"
    """


    """
    TRANSPORT_TYPE_BROADCAST = "BROADCAST"
    """


    """
    TRANSPORT_TYPE_UNICAST = "UNICAST"
    """


    """
    TRANSPORT_TYPE_MULTICAST = "MULTICAST"
    """


    """
    TRANSPORT_TYPE_UNKNOWN = "UNKNOWN"
    """


    """



    _canonical_to_pep_names = {
                            'frame_size': 'frame_size',
                            'resource_type': 'resource_type',
                            'routed': 'routed',
                            'transport_type': 'transport_type',
                            }

    def __init__(self,
                 frame_size=None,
                 resource_type='PacketData',
                 routed=None,
                 transport_type=None,
                ):
        """
        :type  frame_size: :class:`long` or ``None``
        :param frame_size: If the requested frame_size is too small (given the payload and
            traceflow metadata requirement of 16 bytes), the traceflow request
            will fail with an appropriate message. The frame will be zero
            padded to the requested size. format: int64
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`PacketData.RESOURCE_TYPE_BINARYPACKETDATA`
            * :attr:`PacketData.RESOURCE_TYPE_FIELDSPACKETDATA`
            
             Packet configuration
        :type  routed: :class:`bool` or ``None``
        :param routed: A flag, when set true, indicates that the traceflow packet is of L3
            routing.
        :type  transport_type: :class:`str` or ``None``
        :param transport_type: Possible values are: 
            
            * :attr:`PacketData.TRANSPORT_TYPE_BROADCAST`
            * :attr:`PacketData.TRANSPORT_TYPE_UNICAST`
            * :attr:`PacketData.TRANSPORT_TYPE_MULTICAST`
            * :attr:`PacketData.TRANSPORT_TYPE_UNKNOWN`
            
             transport type of the traceflow packet
        """
        self.frame_size = frame_size
        self._resource_type = resource_type
        self.routed = routed
        self.transport_type = transport_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

PacketData._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.packet_data', {
        'frame_size': type.OptionalType(type.IntegerType()),
        'resource_type': type.StringType(),
        'routed': type.OptionalType(type.BooleanType()),
        'transport_type': type.OptionalType(type.StringType()),
    },
    PacketData,
    False,
    None))



class PacketTypeAndCounter(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'counter': 'counter',
                            'packet_type': 'packet_type',
                            }

    def __init__(self,
                 counter=None,
                 packet_type=None,
                ):
        """
        :type  counter: :class:`long` or ``None``
        :param counter: The number of packets. format: int64
        :type  packet_type: :class:`str` or ``None``
        :param packet_type: The type of the packets
        """
        self.counter = counter
        self.packet_type = packet_type
        VapiStruct.__init__(self)


PacketTypeAndCounter._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.packet_type_and_counter', {
        'counter': type.OptionalType(type.IntegerType()),
        'packet_type': type.OptionalType(type.StringType()),
    },
    PacketTypeAndCounter,
    False,
    None))



class PacketsDroppedBySecurity(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'bpdu_filter_dropped': 'bpdu_filter_dropped',
                            'dhcp_client_dropped_ipv4': 'dhcp_client_dropped_ipv4',
                            'dhcp_client_dropped_ipv6': 'dhcp_client_dropped_ipv6',
                            'dhcp_server_dropped_ipv4': 'dhcp_server_dropped_ipv4',
                            'dhcp_server_dropped_ipv6': 'dhcp_server_dropped_ipv6',
                            'spoof_guard_dropped': 'spoof_guard_dropped',
                            }

    def __init__(self,
                 bpdu_filter_dropped=None,
                 dhcp_client_dropped_ipv4=None,
                 dhcp_client_dropped_ipv6=None,
                 dhcp_server_dropped_ipv4=None,
                 dhcp_server_dropped_ipv6=None,
                 spoof_guard_dropped=None,
                ):
        """
        :type  bpdu_filter_dropped: :class:`long` or ``None``
        :param bpdu_filter_dropped: The number of packets dropped by \"BPDU filter\". format: int64
        :type  dhcp_client_dropped_ipv4: :class:`long` or ``None``
        :param dhcp_client_dropped_ipv4: The number of IPv4 packets dropped by \"DHCP client block\".
            format: int64
        :type  dhcp_client_dropped_ipv6: :class:`long` or ``None``
        :param dhcp_client_dropped_ipv6: The number of IPv6 packets dropped by \"DHCP client block\".
            format: int64
        :type  dhcp_server_dropped_ipv4: :class:`long` or ``None``
        :param dhcp_server_dropped_ipv4: The number of IPv4 packets dropped by \"DHCP server block\".
            format: int64
        :type  dhcp_server_dropped_ipv6: :class:`long` or ``None``
        :param dhcp_server_dropped_ipv6: The number of IPv6 packets dropped by \"DHCP server block\".
            format: int64
        :type  spoof_guard_dropped: :class:`list` of :class:`PacketTypeAndCounter` or ``None``
        :param spoof_guard_dropped: The packets dropped by \"Spoof Guard\"; supported packet types are
            IPv4, IPv6, ARP, ND, non-IP.
        """
        self.bpdu_filter_dropped = bpdu_filter_dropped
        self.dhcp_client_dropped_ipv4 = dhcp_client_dropped_ipv4
        self.dhcp_client_dropped_ipv6 = dhcp_client_dropped_ipv6
        self.dhcp_server_dropped_ipv4 = dhcp_server_dropped_ipv4
        self.dhcp_server_dropped_ipv6 = dhcp_server_dropped_ipv6
        self.spoof_guard_dropped = spoof_guard_dropped
        VapiStruct.__init__(self)


PacketsDroppedBySecurity._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.packets_dropped_by_security', {
        'bpdu_filter_dropped': type.OptionalType(type.IntegerType()),
        'dhcp_client_dropped_ipv4': type.OptionalType(type.IntegerType()),
        'dhcp_client_dropped_ipv6': type.OptionalType(type.IntegerType()),
        'dhcp_server_dropped_ipv4': type.OptionalType(type.IntegerType()),
        'dhcp_server_dropped_ipv6': type.OptionalType(type.IntegerType()),
        'spoof_guard_dropped': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PacketTypeAndCounter'))),
    },
    PacketsDroppedBySecurity,
    False,
    None))



class PartialPatchConfig(VapiStruct):
    """
    This object allows enabling or disabling of partial patch functionality.
    Enabling partial patch allows patching of a subset of the fields of any
    object. After enabling partial patching, any object payload provided will
    be merged with the existing object payload. Note that while all mandatory
    fields are expected to be provided during the creation of any object,
    enabling partial patch will allow patching of existing objects with a
    subset of mandatory fields.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'enable_partial_patch': 'enable_partial_patch',
                            }

    def __init__(self,
                 enable_partial_patch=None,
                ):
        """
        :type  enable_partial_patch: :class:`bool` or ``None``
        :param enable_partial_patch: boolean value used to enable/disable partial patch
        """
        self.enable_partial_patch = enable_partial_patch
        VapiStruct.__init__(self)


PartialPatchConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.partial_patch_config', {
        'enable_partial_patch': type.OptionalType(type.BooleanType()),
    },
    PartialPatchConfig,
    False,
    None))



class PatchResources(VapiStruct):
    """
    Patch Resources is an action to create/patch resources in response to an
    event.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "PatchResources"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'body': 'body',
                            'injections': 'injections',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 body=None,
                 injections=None,
                 resource_type='PatchResources',
                ):
        """
        :type  body: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param body: Patch body representing a Hierarchical Patch payload. The resources
            included in the body are patched replacing the injections' keys
            with their actual values.
        :type  injections: :class:`list` of :class:`Injection` or ``None``
        :param injections: Injections holding keys (variables) and their corresponding values.
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`Action.RESOURCE_TYPE_PATCHRESOURCES`
            * :attr:`Action.RESOURCE_TYPE_SETFIELDS`
            
             Reaction Action resource type.
        """
        self.body = body
        self.injections = injections
        self._resource_type = resource_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

PatchResources._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.patch_resources', {
        'body': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct)),
        'injections': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Injection'))),
        'resource_type': type.StringType(),
    },
    PatchResources,
    False,
    None))



class PathExpression(VapiStruct):
    """
    Represents policy path expressions in the form of an array, to support
    addition of objects like groups, segments and policy logical ports in a
    group.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "PathExpression"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'paths': 'paths',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            }

    def __init__(self,
                 paths=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='PathExpression',
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                ):
        """
        :type  paths: :class:`list` of :class:`str` or ``None``
        :param paths: This array can consist of one or more policy paths. Only policy
            paths of groups, segments and policy logical ports are allowed.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`Expression.RESOURCE_TYPE_CONDITION`
            * :attr:`Expression.RESOURCE_TYPE_CONJUNCTIONOPERATOR`
            * :attr:`Expression.RESOURCE_TYPE_NESTEDEXPRESSION`
            * :attr:`Expression.RESOURCE_TYPE_IPADDRESSEXPRESSION`
            * :attr:`Expression.RESOURCE_TYPE_MACADDRESSEXPRESSION`
            * :attr:`Expression.RESOURCE_TYPE_EXTERNALIDEXPRESSION`
            * :attr:`Expression.RESOURCE_TYPE_PATHEXPRESSION`
            * :attr:`Expression.RESOURCE_TYPE_IDENTITYGROUPEXPRESSION`
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.paths = paths
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

PathExpression._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.path_expression', {
        'paths': type.OptionalType(type.ListType(type.StringType())),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
    },
    PathExpression,
    False,
    None))



class PathPermissionGroup(VapiStruct):
    """
    RBAC Objects qualifier

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    OPERATION_CRUD = "crud"
    """


    """
    OPERATION_READ = "read"
    """


    """
    OPERATION_EXECUTE = "execute"
    """


    """
    OPERATION_NONE = "none"
    """


    """



    _canonical_to_pep_names = {
                            'object_path': 'object_path',
                            'operation': 'operation',
                            }

    def __init__(self,
                 object_path=None,
                 operation=None,
                ):
        """
        :type  object_path: :class:`str` or ``None``
        :param object_path: Full Object Path
        :type  operation: :class:`str` or ``None``
        :param operation: Possible values are: 
            
            * :attr:`PathPermissionGroup.OPERATION_CRUD`
            * :attr:`PathPermissionGroup.OPERATION_READ`
            * :attr:`PathPermissionGroup.OPERATION_EXECUTE`
            * :attr:`PathPermissionGroup.OPERATION_NONE`
            
             Allowed operation
        """
        self.object_path = object_path
        self.operation = operation
        VapiStruct.__init__(self)


PathPermissionGroup._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.path_permission_group', {
        'object_path': type.OptionalType(type.StringType()),
        'operation': type.OptionalType(type.StringType()),
    },
    PathPermissionGroup,
    False,
    None))



class PeerCertificateChain(VapiStruct):
    """
    The certificate chain presented by a remote TLS service.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'details': 'details',
                            'pem_encoded': 'pem_encoded',
                            }

    def __init__(self,
                 details=None,
                 pem_encoded=None,
                ):
        """
        :type  details: :class:`list` of :class:`X509Certificate` or ``None``
        :param details: List of X509Certificates.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  pem_encoded: :class:`str` or ``None``
        :param pem_encoded: PEM encoded certificate data.
        """
        self.details = details
        self.pem_encoded = pem_encoded
        VapiStruct.__init__(self)


PeerCertificateChain._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.peer_certificate_chain', {
        'details': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'X509Certificate'))),
        'pem_encoded': type.OptionalType(type.StringType()),
    },
    PeerCertificateChain,
    False,
    None))



class PendingChangesInfoNsxt(VapiStruct):
    """
    Information about recent changes, if any, that are not reflected in the
    Enforced Realized Status.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'pending_changes_flag': 'pending_changes_flag',
                            }

    def __init__(self,
                 pending_changes_flag=None,
                ):
        """
        :type  pending_changes_flag: :class:`bool` or ``None``
        :param pending_changes_flag: Flag describing whether there are any pending changes that are not
            reflected in the status.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.pending_changes_flag = pending_changes_flag
        VapiStruct.__init__(self)


PendingChangesInfoNsxt._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.pending_changes_info_nsxt', {
        'pending_changes_flag': type.OptionalType(type.BooleanType()),
    },
    PendingChangesInfoNsxt,
    False,
    None))



class PerStepRestoreStatus(VapiStruct):
    """
    Restore step status

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    VALUE_INITIAL = "INITIAL"
    """


    """
    VALUE_RUNNING = "RUNNING"
    """


    """
    VALUE_SUSPENDED_BY_USER = "SUSPENDED_BY_USER"
    """


    """
    VALUE_SUSPENDED_FOR_USER_ACTION = "SUSPENDED_FOR_USER_ACTION"
    """


    """
    VALUE_FAILED = "FAILED"
    """


    """
    VALUE_SUCCESS = "SUCCESS"
    """


    """



    _canonical_to_pep_names = {
                            'description': 'description',
                            'value': 'value',
                            }

    def __init__(self,
                 description=None,
                 value=None,
                ):
        """
        :type  description: :class:`str` or ``None``
        :param description: A description of the restore status
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  value: :class:`str` or ``None``
        :param value: Possible values are: 
            
            * :attr:`PerStepRestoreStatus.VALUE_INITIAL`
            * :attr:`PerStepRestoreStatus.VALUE_RUNNING`
            * :attr:`PerStepRestoreStatus.VALUE_SUSPENDED_BY_USER`
            * :attr:`PerStepRestoreStatus.VALUE_SUSPENDED_FOR_USER_ACTION`
            * :attr:`PerStepRestoreStatus.VALUE_FAILED`
            * :attr:`PerStepRestoreStatus.VALUE_SUCCESS`
            
             Per step restore status value
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.description = description
        self.value = value
        VapiStruct.__init__(self)


PerStepRestoreStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.per_step_restore_status', {
        'description': type.OptionalType(type.StringType()),
        'value': type.OptionalType(type.StringType()),
    },
    PerStepRestoreStatus,
    False,
    None))



class PimRpMapping(VapiStruct):
    """
    PIM (Protocol Independent Multicast) RP (Randezvous Point) mapping details.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'group': 'group',
                            'is_rp': 'is_rp',
                            'outgoing_interface': 'outgoing_interface',
                            'rp_address': 'rp_address',
                            'source': 'source',
                            }

    def __init__(self,
                 group=None,
                 is_rp=None,
                 outgoing_interface=None,
                 rp_address=None,
                 source=None,
                ):
        """
        :type  group: :class:`str` or ``None``
        :param group: Multicast group address. format: ip
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  is_rp: :class:`bool` or ``None``
        :param is_rp: Value of this field will be true if this edge transport node acts
            as rendezvous point, otherwise false.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  outgoing_interface: :class:`str` or ``None``
        :param outgoing_interface: Outgoing/Egress interface for multicast traffic.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  rp_address: :class:`str` or ``None``
        :param rp_address: RP (Randezvous Point) address. format: ip
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  source: :class:`str` or ``None``
        :param source: Source of learning RP information. Either Static RP configured or
            RP learned via BSR (Bootstrap Router).
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.group = group
        self.is_rp = is_rp
        self.outgoing_interface = outgoing_interface
        self.rp_address = rp_address
        self.source = source
        VapiStruct.__init__(self)


PimRpMapping._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.pim_rp_mapping', {
        'group': type.OptionalType(type.StringType()),
        'is_rp': type.OptionalType(type.BooleanType()),
        'outgoing_interface': type.OptionalType(type.StringType()),
        'rp_address': type.OptionalType(type.StringType()),
        'source': type.OptionalType(type.StringType()),
    },
    PimRpMapping,
    False,
    None))



class PimRpMappingCsvRecord(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'group': 'group',
                            'is_rp': 'is_rp',
                            'outgoing_interface': 'outgoing_interface',
                            'rp_address': 'rp_address',
                            'source': 'source',
                            'transport_node': 'transport_node',
                            }

    def __init__(self,
                 group=None,
                 is_rp=None,
                 outgoing_interface=None,
                 rp_address=None,
                 source=None,
                 transport_node=None,
                ):
        """
        :type  group: :class:`str` or ``None``
        :param group: Multicast group address. format: ip
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  is_rp: :class:`bool` or ``None``
        :param is_rp: Value of this field will be true if this edge transport node acts
            as rendezvous point, otherwise false.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  outgoing_interface: :class:`str` or ``None``
        :param outgoing_interface: Outgoing/Egress interface for multicast traffic.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  rp_address: :class:`str` or ``None``
        :param rp_address: RP (Randezvous Point) address. format: ip
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  source: :class:`str` or ``None``
        :param source: Source of learning RP information. Either Static RP configured or
            RP learned via BSR (Bootstrap Router).
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  transport_node: :class:`str` or ``None``
        :param transport_node: Transport node uuid or policy path.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.group = group
        self.is_rp = is_rp
        self.outgoing_interface = outgoing_interface
        self.rp_address = rp_address
        self.source = source
        self.transport_node = transport_node
        VapiStruct.__init__(self)


PimRpMappingCsvRecord._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.pim_rp_mapping_csv_record', {
        'group': type.OptionalType(type.StringType()),
        'is_rp': type.OptionalType(type.BooleanType()),
        'outgoing_interface': type.OptionalType(type.StringType()),
        'rp_address': type.OptionalType(type.StringType()),
        'source': type.OptionalType(type.StringType()),
        'transport_node': type.OptionalType(type.StringType()),
    },
    PimRpMappingCsvRecord,
    False,
    None))



class PimRpMappings(VapiStruct):
    """
    PIM Rendezvous Point Mappings.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'gateway_path': 'gateway_path',
                            'pim_rp_mappings_per_edge': 'pim_rp_mappings_per_edge',
                            }

    def __init__(self,
                 gateway_path=None,
                 pim_rp_mappings_per_edge=None,
                ):
        """
        :type  gateway_path: :class:`str` or ``None``
        :param gateway_path: Policy path to Tier0 gateway.
        :type  pim_rp_mappings_per_edge: :class:`list` of :class:`PimRpMappingsPerEdge` or ``None``
        :param pim_rp_mappings_per_edge: 
        """
        self.gateway_path = gateway_path
        self.pim_rp_mappings_per_edge = pim_rp_mappings_per_edge
        VapiStruct.__init__(self)


PimRpMappings._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.pim_rp_mappings', {
        'gateway_path': type.OptionalType(type.StringType()),
        'pim_rp_mappings_per_edge': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PimRpMappingsPerEdge'))),
    },
    PimRpMappings,
    False,
    None))



class PimRpMappingsInCsvFormat(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'file_name': 'file_name',
                            'results': 'results',
                            }

    def __init__(self,
                 file_name=None,
                 results=None,
                ):
        """
        :type  file_name: :class:`str` or ``None``
        :param file_name: File name set by HTTP server if API returns CSV result as a file.
        :type  results: :class:`list` of :class:`PimRpMappingCsvRecord` or ``None``
        :param results: 
        """
        self.file_name = file_name
        self.results = results
        VapiStruct.__init__(self)


PimRpMappingsInCsvFormat._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.pim_rp_mappings_in_csv_format', {
        'file_name': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PimRpMappingCsvRecord'))),
    },
    PimRpMappingsInCsvFormat,
    False,
    None))



class PimRpMappingsPerEdge(VapiStruct):
    """
    PIM Rendezvous Point Mappings Per Edge.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'edge_path': 'edge_path',
                            'pim_rp_mappings': 'pim_rp_mappings',
                            }

    def __init__(self,
                 edge_path=None,
                 pim_rp_mappings=None,
                ):
        """
        :type  edge_path: :class:`str` or ``None``
        :param edge_path: Policy path to edge node.
        :type  pim_rp_mappings: :class:`list` of :class:`PimRpMapping` or ``None``
        :param pim_rp_mappings: 
        """
        self.edge_path = edge_path
        self.pim_rp_mappings = pim_rp_mappings
        VapiStruct.__init__(self)


PimRpMappingsPerEdge._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.pim_rp_mappings_per_edge', {
        'edge_path': type.OptionalType(type.StringType()),
        'pim_rp_mappings': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PimRpMapping'))),
    },
    PimRpMappingsPerEdge,
    False,
    None))



class PointDefinition(VapiStruct):
    """
    Defines the point of a graph.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'drilldown_id': 'drilldown_id',
                            'field': 'field',
                            'navigation': 'navigation',
                            'tooltip': 'tooltip',
                            'x_value': 'x_value',
                            'y_value': 'y_value',
                            }

    def __init__(self,
                 drilldown_id=None,
                 field=None,
                 navigation=None,
                 tooltip=None,
                 x_value=None,
                 y_value=None,
                ):
        """
        :type  drilldown_id: :class:`str` or ``None``
        :param drilldown_id: Id of drilldown widget, if any. Id should be a valid id of an
            existing widget. A widget is considered as drilldown widget when it
            is associated with any other widget and provides more detailed
            information about any data item from the parent widget.
        :type  field: :class:`str` or ``None``
        :param field: An expression that represents the points of the graph
        :type  navigation: :class:`str` or ``None``
        :param navigation: Hyperlink of the specified UI page that provides details.
        :type  tooltip: :class:`list` of :class:`Tooltip` or ``None``
        :param tooltip: Multi-line text to be shown on tooltip while hovering over the
            point of a graph.
        :type  x_value: :class:`str` or ``None``
        :param x_value: Represents the variable for the X value of points that are plotted
            on the graph.
        :type  y_value: :class:`str` or ``None``
        :param y_value: Represents the variable for the Y value of points that are plotted
            on the graph.
        """
        self.drilldown_id = drilldown_id
        self.field = field
        self.navigation = navigation
        self.tooltip = tooltip
        self.x_value = x_value
        self.y_value = y_value
        VapiStruct.__init__(self)


PointDefinition._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.point_definition', {
        'drilldown_id': type.OptionalType(type.StringType()),
        'field': type.OptionalType(type.StringType()),
        'navigation': type.OptionalType(type.StringType()),
        'tooltip': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tooltip'))),
        'x_value': type.OptionalType(type.StringType()),
        'y_value': type.OptionalType(type.StringType()),
    },
    PointDefinition,
    False,
    None))



class Policy(VapiStruct):
    """
    Ordered list of Rules. This object is created by default along with the
    Domain.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'category': 'category',
                            'comments': 'comments',
                            'internal_sequence_number': 'internal_sequence_number',
                            'is_default': 'is_default',
                            'lock_modified_by': 'lock_modified_by',
                            'lock_modified_time': 'lock_modified_time',
                            'locked': 'locked',
                            'rule_count': 'rule_count',
                            'scheduler_path': 'scheduler_path',
                            'scope': 'scope',
                            'sequence_number': 'sequence_number',
                            'stateful': 'stateful',
                            'tcp_strict': 'tcp_strict',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 category=None,
                 comments=None,
                 internal_sequence_number=None,
                 is_default=None,
                 lock_modified_by=None,
                 lock_modified_time=None,
                 locked=None,
                 rule_count=None,
                 scheduler_path=None,
                 scope=None,
                 sequence_number=None,
                 stateful=None,
                 tcp_strict=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  category: :class:`str` or ``None``
        :param category: - Distributed Firewall - Policy framework provides five pre-defined
            categories for classifying a security policy. They are
            \"Ethernet\",\"Emergency\", \"Infrastructure\" \"Environment\" and
            \"Application\". There is a pre-determined order in which the
            policy framework manages the priority of these security policies.
            Ethernet category is for supporting layer 2 firewall rules. The
            other four categories are applicable for layer 3 rules. Amongst
            them, the Emergency category has the highest priority followed by
            Infrastructure, Environment and then Application rules.
            Administrator can choose to categorize a security policy into the
            above categories or can choose to leave it empty. If empty it will
            have the least precedence w.r.t the above four categories. - Edge
            Firewall - Policy Framework for Edge Firewall provides six
            pre-defined categories \"Emergency\", \"SystemRules\",
            \"SharedPreRules\", \"LocalGatewayRules\", \"AutoServiceRules\" and
            \"Default\", in order of priority of rules. All categories are
            allowed for Gatetway Policies that belong to 'default' Domain.
            However, for user created domains, category is restricted to
            \"SharedPreRules\" or \"LocalGatewayRules\" only. Also, the users
            can add/modify/delete rules from only the \"SharedPreRules\" and
            \"LocalGatewayRules\" categories. If user doesn't specify the
            category then defaulted to \"Rules\". System generated category is
            used by NSX created rules, for example BFD rules. Autoplumbed
            category used by NSX verticals to autoplumb data path rules.
            Finally, \"Default\" category is the placeholder default rules with
            lowest in the order of priority.
        :type  comments: :class:`str` or ``None``
        :param comments: Comments for security policy lock/unlock.
        :type  internal_sequence_number: :class:`long` or ``None``
        :param internal_sequence_number: This field is to indicate the internal sequence number of a policy
            with respect to the policies across categories. format: int32
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  is_default: :class:`bool` or ``None``
        :param is_default: A flag to indicate whether policy is a default policy.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  lock_modified_by: :class:`str` or ``None``
        :param lock_modified_by: ID of the user who last modified the lock for the secruity policy.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  lock_modified_time: :class:`long` or ``None``
        :param lock_modified_time: SecurityPolicy locked/unlocked time in epoch milliseconds. format:
            int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  locked: :class:`bool` or ``None``
        :param locked: Indicates whether a security policy should be locked. If the
            security policy is locked by a user, then no other user would be
            able to modify this security policy. Once the user releases the
            lock, other users can update this security policy.
        :type  rule_count: :class:`long` or ``None``
        :param rule_count: The count of rules in the policy. format: int32
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  scheduler_path: :class:`str` or ``None``
        :param scheduler_path: Provides a mechanism to apply the rules in this policy for a
            specified time duration.
        :type  scope: :class:`list` of :class:`str` or ``None``
        :param scope: The list of group paths where the rules in this policy will get
            applied. This scope will take precedence over rule level scope.
            Supported only for security and redirection policies. In case of
            RedirectionPolicy, it is expected only when the policy is NS and
            redirecting to service chain.
        :type  sequence_number: :class:`long` or ``None``
        :param sequence_number: This field is used to resolve conflicts between security policies
            across domains. In order to change the sequence number of a policy
            one can fire a POST request on the policy entity with a query
            parameter action=revise The sequence number field will reflect the
            value of the computed sequence number upon execution of the above
            mentioned POST request. For scenarios where the administrator is
            using a template to update several security policies, the only way
            to set the sequence number is to explicitly specify the sequence
            number for each security policy. If no sequence number is specified
            in the payload, a value of 0 is assigned by default. If there are
            multiple policies with the same sequence number then their order is
            not deterministic. If a specific order of policies is desired, then
            one has to specify unique sequence numbers or use the POST request
            on the policy entity with a query parameter action=revise to let
            the framework assign a sequence number format: int32
        :type  stateful: :class:`bool` or ``None``
        :param stateful: Stateful or Stateless nature of security policy is enforced on all
            rules in this security policy. When it is stateful, the state of
            the network connects are tracked and a stateful packet inspection
            is performed. Layer3 security policies can be stateful or
            stateless. By default, they are stateful. Layer2 security policies
            can only be stateless.
        :type  tcp_strict: :class:`bool` or ``None``
        :param tcp_strict: Ensures that a 3 way TCP handshake is done before the data packets
            are sent. tcp_strict=true is supported only for stateful security
            policies. If the tcp_strict flag is not specified and the security
            policy is stateful, then tcp_strict will be set to true.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.category = category
        self.comments = comments
        self.internal_sequence_number = internal_sequence_number
        self.is_default = is_default
        self.lock_modified_by = lock_modified_by
        self.lock_modified_time = lock_modified_time
        self.locked = locked
        self.rule_count = rule_count
        self.scheduler_path = scheduler_path
        self.scope = scope
        self.sequence_number = sequence_number
        self.stateful = stateful
        self.tcp_strict = tcp_strict
        VapiStruct.__init__(self)


Policy._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'category': type.OptionalType(type.StringType()),
        'comments': type.OptionalType(type.StringType()),
        'internal_sequence_number': type.OptionalType(type.IntegerType()),
        'is_default': type.OptionalType(type.BooleanType()),
        'lock_modified_by': type.OptionalType(type.StringType()),
        'lock_modified_time': type.OptionalType(type.IntegerType()),
        'locked': type.OptionalType(type.BooleanType()),
        'rule_count': type.OptionalType(type.IntegerType()),
        'scheduler_path': type.OptionalType(type.StringType()),
        'scope': type.OptionalType(type.ListType(type.StringType())),
        'sequence_number': type.OptionalType(type.IntegerType()),
        'stateful': type.OptionalType(type.BooleanType()),
        'tcp_strict': type.OptionalType(type.BooleanType()),
    },
    Policy,
    False,
    None))



class PolicyAlarmResource(VapiStruct):
    """
    Alarm base class of realized policy object

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'error_details': 'error_details',
                            'message': 'message',
                            'source_reference': 'source_reference',
                            'source_site_id': 'source_site_id',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 error_details=None,
                 message=None,
                 source_reference=None,
                 source_site_id=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  error_details: :class:`PolicyApiError` or ``None``
        :param error_details: Detailed information about errors from an API call made to the
            enforcement point, if any.
        :type  message: :class:`str` or ``None``
        :param message: error message to describe the issue
        :type  source_reference: :class:`str` or ``None``
        :param source_reference: path of the object on which alarm is created
        :type  source_site_id: :class:`str` or ``None``
        :param source_site_id: This field will refer to the source site on which the alarm is
            generated. This field is populated by GM, when it receives
            corresponding notification from LM.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.error_details = error_details
        self.message = message
        self.source_reference = source_reference
        self.source_site_id = source_site_id
        VapiStruct.__init__(self)


PolicyAlarmResource._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_alarm_resource', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'error_details': type.OptionalType(type.ReferenceType(__name__, 'PolicyApiError')),
        'message': type.OptionalType(type.StringType()),
        'source_reference': type.OptionalType(type.StringType()),
        'source_site_id': type.OptionalType(type.StringType()),
    },
    PolicyAlarmResource,
    False,
    None))



class PolicyAlarmResourceListResult(VapiStruct):
    """
    PolicyAlarmResource list result

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`PolicyAlarmResource` or ``None``
        :param results: List of alarm resources
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


PolicyAlarmResourceListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_alarm_resource_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyAlarmResource'))),
    },
    PolicyAlarmResourceListResult,
    False,
    None))



class PolicyApiError(VapiStruct):
    """
    Detailed information about an API Error

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'details': 'details',
                            'error_code': 'error_code',
                            'error_data': 'error_data',
                            'error_message': 'error_message',
                            'module_name': 'module_name',
                            'related_errors': 'related_errors',
                            }

    def __init__(self,
                 details=None,
                 error_code=None,
                 error_data=None,
                 error_message=None,
                 module_name=None,
                 related_errors=None,
                ):
        """
        :type  details: :class:`str` or ``None``
        :param details: Further details about the error
        :type  error_code: :class:`long` or ``None``
        :param error_code: A numeric error code format: int64
        :type  error_data: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param error_data: Additional data about the error
        :type  error_message: :class:`str` or ``None``
        :param error_message: A description of the error
        :type  module_name: :class:`str` or ``None``
        :param module_name: The module name where the error occurred
        :type  related_errors: :class:`list` of :class:`PolicyRelatedApiError` or ``None``
        :param related_errors: Other errors related to this error
        """
        self.details = details
        self.error_code = error_code
        self.error_data = error_data
        self.error_message = error_message
        self.module_name = module_name
        self.related_errors = related_errors
        VapiStruct.__init__(self)


PolicyApiError._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_api_error', {
        'details': type.OptionalType(type.StringType()),
        'error_code': type.OptionalType(type.IntegerType()),
        'error_data': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct)),
        'error_message': type.OptionalType(type.StringType()),
        'module_name': type.OptionalType(type.StringType()),
        'related_errors': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyRelatedApiError'))),
    },
    PolicyApiError,
    False,
    None))



class PolicyAttributes(VapiStruct):
    """
    Policy Attributes data holder

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    DATATYPE_STRING = "STRING"
    """


    """
    KEY_APP_ID = "APP_ID"
    """


    """
    KEY_DOMAIN_NAME = "DOMAIN_NAME"
    """


    """
    KEY_URL_CATEGORY = "URL_CATEGORY"
    """


    """



    _canonical_to_pep_names = {
                            'datatype': 'datatype',
                            'description': 'description',
                            'isALGType': 'is_alg_type',
                            'key': 'key',
                            'sub_attributes': 'sub_attributes',
                            'value': 'value',
                            }

    def __init__(self,
                 datatype=None,
                 description=None,
                 is_alg_type=None,
                 key=None,
                 sub_attributes=None,
                 value=None,
                ):
        """
        :type  datatype: :class:`str` or ``None``
        :param datatype: Possible values are: 
            
            * :attr:`PolicyAttributes.DATATYPE_STRING`
            
             Datatype for attribute
        :type  description: :class:`str` or ``None``
        :param description: Description for attribute value
        :type  is_alg_type: :class:`bool` or ``None``
        :param is_alg_type: Describes whether the APP_ID value is ALG type or not.
        :type  key: :class:`str` or ``None``
        :param key: Possible values are: 
            
            * :attr:`PolicyAttributes.KEY_APP_ID`
            * :attr:`PolicyAttributes.KEY_DOMAIN_NAME`
            * :attr:`PolicyAttributes.KEY_URL_CATEGORY`
            
             Key for attribute
        :type  sub_attributes: :class:`list` of :class:`PolicySubAttributes` or ``None``
        :param sub_attributes: Reference to sub attributes for the attribute
        :type  value: :class:`list` of :class:`str` or ``None``
        :param value: Multiple attribute values can be specified as elements of array.
        """
        self.datatype = datatype
        self.description = description
        self.is_alg_type = is_alg_type
        self.key = key
        self.sub_attributes = sub_attributes
        self.value = value
        VapiStruct.__init__(self)


PolicyAttributes._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_attributes', {
        'datatype': type.OptionalType(type.StringType()),
        'description': type.OptionalType(type.StringType()),
        'isALGType': type.OptionalType(type.BooleanType()),
        'key': type.OptionalType(type.StringType()),
        'sub_attributes': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicySubAttributes'))),
        'value': type.OptionalType(type.ListType(type.StringType())),
    },
    PolicyAttributes,
    False,
    None))



class PolicyBasedIPSecVpnSession(VapiStruct):
    """
    A Policy Based VPN requires to define protect rules that match local and
    peer subnets. IPSec security associations is negotiated for each pair of
    local and peer subnet.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "PolicyBasedIPSecVpnSession"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'rules': 'rules',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'authentication_mode': 'authentication_mode',
                            'compliance_suite': 'compliance_suite',
                            'connection_initiation_mode': 'connection_initiation_mode',
                            'dpd_profile_path': 'dpd_profile_path',
                            'enabled': 'enabled',
                            'ike_profile_path': 'ike_profile_path',
                            'local_endpoint_path': 'local_endpoint_path',
                            'peer_address': 'peer_address',
                            'peer_id': 'peer_id',
                            'psk': 'psk',
                            'tcp_mss_clamping': 'tcp_mss_clamping',
                            'tunnel_profile_path': 'tunnel_profile_path',
                            }

    def __init__(self,
                 rules=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='PolicyBasedIPSecVpnSession',
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 authentication_mode=None,
                 compliance_suite=None,
                 connection_initiation_mode=None,
                 dpd_profile_path=None,
                 enabled=None,
                 ike_profile_path=None,
                 local_endpoint_path=None,
                 peer_address=None,
                 peer_id=None,
                 psk=None,
                 tcp_mss_clamping=None,
                 tunnel_profile_path=None,
                ):
        """
        :type  rules: :class:`list` of :class:`IPSecVpnRule` or ``None``
        :param rules: Rules
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`IPSecVpnSession.RESOURCE_TYPE_POLICYBASEDIPSECVPNSESSION`
            * :attr:`IPSecVpnSession.RESOURCE_TYPE_ROUTEBASEDIPSECVPNSESSION`
            
            A Policy Based VPN requires to define protect rules that match
            local and peer subnets. IPSec security associations is negotiated
            for each pair of local and peer subnet. A Route Based VPN is more
            flexible, more powerful and recommended over policy based VPN. IP
            Tunnel port is created and all traffic routed via tunnel port is
            protected. Routes can be configured statically or can be learned
            through BGP. A route based VPN is must for establishing redundant
            VPN session to remote site.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  authentication_mode: :class:`str` or ``None``
        :param authentication_mode: Possible values are: 
            
            * :attr:`IPSecVpnSession.AUTHENTICATION_MODE_PSK`
            * :attr:`IPSecVpnSession.AUTHENTICATION_MODE_CERTIFICATE`
            
            Peer authentication mode. PSK - In this mode a secret key shared
            between local and peer sites is to be used for authentication. The
            secret key can be a string with a maximum length of 128 characters.
            CERTIFICATE - In this mode a certificate defined at the global
            level is to be used for authentication.
        :type  compliance_suite: :class:`str` or ``None``
        :param compliance_suite: Possible values are: 
            
            * :attr:`IPSecVpnSession.COMPLIANCE_SUITE_CNSA`
            * :attr:`IPSecVpnSession.COMPLIANCE_SUITE_SUITE_B_GCM_128`
            * :attr:`IPSecVpnSession.COMPLIANCE_SUITE_SUITE_B_GCM_256`
            * :attr:`IPSecVpnSession.COMPLIANCE_SUITE_PRIME`
            * :attr:`IPSecVpnSession.COMPLIANCE_SUITE_FOUNDATION`
            * :attr:`IPSecVpnSession.COMPLIANCE_SUITE_FIPS`
            * :attr:`IPSecVpnSession.COMPLIANCE_SUITE_NONE`
            
             Compliance suite.
        :type  connection_initiation_mode: :class:`str` or ``None``
        :param connection_initiation_mode: Possible values are: 
            
            * :attr:`IPSecVpnSession.CONNECTION_INITIATION_MODE_INITIATOR`
            * :attr:`IPSecVpnSession.CONNECTION_INITIATION_MODE_RESPOND_ONLY`
            * :attr:`IPSecVpnSession.CONNECTION_INITIATION_MODE_ON_DEMAND`
            
            Connection initiation mode used by local endpoint to establish ike
            connection with peer site. INITIATOR - In this mode local endpoint
            initiates tunnel setup and will also respond to incoming tunnel
            setup requests from peer gateway. RESPOND_ONLY - In this mode,
            local endpoint shall only respond to incoming tunnel setup
            requests. It shall not initiate the tunnel setup. ON_DEMAND - In
            this mode local endpoint will initiate tunnel creation once first
            packet matching the policy rule is received and will also respond
            to incoming initiation request.
        :type  dpd_profile_path: :class:`str` or ``None``
        :param dpd_profile_path: Policy path referencing Dead Peer Detection (DPD) profile. Default
            is set to system default profile.
        :type  enabled: :class:`bool` or ``None``
        :param enabled: Enable/Disable IPSec VPN session.
        :type  ike_profile_path: :class:`str` or ``None``
        :param ike_profile_path: Policy path referencing IKE profile to be used. Default is set
            according to system default profile.
        :type  local_endpoint_path: :class:`str` or ``None``
        :param local_endpoint_path: Policy path referencing Local endpoint.
        :type  peer_address: :class:`str` or ``None``
        :param peer_address: Public IPV4 address of the remote device terminating the VPN
            connection.
        :type  peer_id: :class:`str` or ``None``
        :param peer_id: Peer ID to uniquely identify the peer site. The peer ID is the
            public IP address of the remote device terminating the VPN tunnel.
            When NAT is configured for the peer, enter the private IP address
            of the peer.
        :type  psk: :class:`str` or ``None``
        :param psk: IPSec Pre-shared key. Maximum length of this field is 128
            characters.
        :type  tcp_mss_clamping: :class:`TcpMaximumSegmentSizeClamping` or ``None``
        :param tcp_mss_clamping: TCP Maximum Segment Size Clamping Direction and Value.
        :type  tunnel_profile_path: :class:`str` or ``None``
        :param tunnel_profile_path: Policy path referencing Tunnel profile to be used. Default is set
            to system default profile.
        """
        self.rules = rules
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.authentication_mode = authentication_mode
        self.compliance_suite = compliance_suite
        self.connection_initiation_mode = connection_initiation_mode
        self.dpd_profile_path = dpd_profile_path
        self.enabled = enabled
        self.ike_profile_path = ike_profile_path
        self.local_endpoint_path = local_endpoint_path
        self.peer_address = peer_address
        self.peer_id = peer_id
        self.psk = psk
        self.tcp_mss_clamping = tcp_mss_clamping
        self.tunnel_profile_path = tunnel_profile_path
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

PolicyBasedIPSecVpnSession._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_based_IP_sec_vpn_session', {
        'rules': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'IPSecVpnRule'))),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'authentication_mode': type.OptionalType(type.StringType()),
        'compliance_suite': type.OptionalType(type.StringType()),
        'connection_initiation_mode': type.OptionalType(type.StringType()),
        'dpd_profile_path': type.OptionalType(type.StringType()),
        'enabled': type.OptionalType(type.BooleanType()),
        'ike_profile_path': type.OptionalType(type.StringType()),
        'local_endpoint_path': type.OptionalType(type.StringType()),
        'peer_address': type.OptionalType(type.StringType()),
        'peer_id': type.OptionalType(type.StringType()),
        'psk': type.OptionalType(type.StringType()),
        'tcp_mss_clamping': type.OptionalType(type.ReferenceType(__name__, 'TcpMaximumSegmentSizeClamping')),
        'tunnel_profile_path': type.OptionalType(type.StringType()),
    },
    PolicyBasedIPSecVpnSession,
    False,
    None))



class PolicyBasedL3VpnSession(VapiStruct):
    """
    A Policy-based L3Vpn session is a configuration in which a specific vpn
    tunnel is referenced in a policy whose action is set as tunnel.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "PolicyBasedL3VpnSession"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'rules': 'rules',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 rules=None,
                 resource_type='PolicyBasedL3VpnSession',
                ):
        """
        :type  rules: :class:`list` of :class:`L3VpnRule` or ``None``
        :param rules: L3Vpn rules that are specific to the L3Vpn. Only L3Vpn rules with
            PROTECT action are supported.
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`L3VpnSession.RESOURCE_TYPE_POLICYBASEDL3VPNSESSION`
            * :attr:`L3VpnSession.RESOURCE_TYPE_ROUTEBASEDL3VPNSESSION`
            
            - A Policy Based L3Vpn is a configuration in which protect rules to
            match local and remote subnet needs to be defined. Tunnel is
            established for each pair of local and remote subnet defined in
            protect rules. - A Route Based L3Vpn is more flexible, more
            powerful and recommended over policy based. IP Tunnel subnet is
            created and all traffic routed through tunnel subnet (commonly
            known as VTI) is sent over tunnel. Routes can be learned through
            BGP. A route based L3Vpn is required when using redundant L3Vpn.
        """
        self.rules = rules
        self._resource_type = resource_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

PolicyBasedL3VpnSession._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_based_l3_vpn_session', {
        'rules': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'L3VpnRule'))),
        'resource_type': type.StringType(),
    },
    PolicyBasedL3VpnSession,
    False,
    None))



class PolicyBgpNeighborStatus(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    CONNECTION_STATE_INVALID = "INVALID"
    """


    """
    CONNECTION_STATE_IDLE = "IDLE"
    """


    """
    CONNECTION_STATE_CONNECT = "CONNECT"
    """


    """
    CONNECTION_STATE_ACTIVE = "ACTIVE"
    """


    """
    CONNECTION_STATE_OPEN_SENT = "OPEN_SENT"
    """


    """
    CONNECTION_STATE_OPEN_CONFIRM = "OPEN_CONFIRM"
    """


    """
    CONNECTION_STATE_ESTABLISHED = "ESTABLISHED"
    """


    """
    CONNECTION_STATE_UNKNOWN = "UNKNOWN"
    """


    """



    _canonical_to_pep_names = {
                            'address_families': 'address_families',
                            'announced_capabilities': 'announced_capabilities',
                            'connection_drop_count': 'connection_drop_count',
                            'connection_state': 'connection_state',
                            'edge_path': 'edge_path',
                            'established_connection_count': 'established_connection_count',
                            'graceful_restart_mode': 'graceful_restart_mode',
                            'hold_time': 'hold_time',
                            'keep_alive_interval': 'keep_alive_interval',
                            'last_update_timestamp': 'last_update_timestamp',
                            'local_port': 'local_port',
                            'messages_received': 'messages_received',
                            'messages_sent': 'messages_sent',
                            'negotiated_capability': 'negotiated_capability',
                            'neighbor_address': 'neighbor_address',
                            'neighbor_router_id': 'neighbor_router_id',
                            'remote_as_number': 'remote_as_number',
                            'remote_port': 'remote_port',
                            'remote_site': 'remote_site',
                            'source_address': 'source_address',
                            'tier0_path': 'tier0_path',
                            'time_since_established': 'time_since_established',
                            'total_in_prefix_count': 'total_in_prefix_count',
                            'total_out_prefix_count': 'total_out_prefix_count',
                            }

    def __init__(self,
                 address_families=None,
                 announced_capabilities=None,
                 connection_drop_count=None,
                 connection_state=None,
                 edge_path=None,
                 established_connection_count=None,
                 graceful_restart_mode=None,
                 hold_time=None,
                 keep_alive_interval=None,
                 last_update_timestamp=None,
                 local_port=None,
                 messages_received=None,
                 messages_sent=None,
                 negotiated_capability=None,
                 neighbor_address=None,
                 neighbor_router_id=None,
                 remote_as_number=None,
                 remote_port=None,
                 remote_site=None,
                 source_address=None,
                 tier0_path=None,
                 time_since_established=None,
                 total_in_prefix_count=None,
                 total_out_prefix_count=None,
                ):
        """
        :type  address_families: :class:`list` of :class:`BgpAddressFamily` or ``None``
        :param address_families: Address families of BGP neighbor
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  announced_capabilities: :class:`list` of :class:`str` or ``None``
        :param announced_capabilities: BGP capabilities sent to BGP neighbor.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  connection_drop_count: :class:`long` or ``None``
        :param connection_drop_count: Count of connection drop format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  connection_state: :class:`str` or ``None``
        :param connection_state: Possible values are: 
            
            * :attr:`PolicyBgpNeighborStatus.CONNECTION_STATE_INVALID`
            * :attr:`PolicyBgpNeighborStatus.CONNECTION_STATE_IDLE`
            * :attr:`PolicyBgpNeighborStatus.CONNECTION_STATE_CONNECT`
            * :attr:`PolicyBgpNeighborStatus.CONNECTION_STATE_ACTIVE`
            * :attr:`PolicyBgpNeighborStatus.CONNECTION_STATE_OPEN_SENT`
            * :attr:`PolicyBgpNeighborStatus.CONNECTION_STATE_OPEN_CONFIRM`
            * :attr:`PolicyBgpNeighborStatus.CONNECTION_STATE_ESTABLISHED`
            * :attr:`PolicyBgpNeighborStatus.CONNECTION_STATE_UNKNOWN`
            
             Current state of the BGP session.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  edge_path: :class:`str` or ``None``
        :param edge_path: Transport node policy path
        :type  established_connection_count: :class:`long` or ``None``
        :param established_connection_count: Count of connections established format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  graceful_restart_mode: :class:`str` or ``None``
        :param graceful_restart_mode: Current state of graceful restart of BGP neighbor. Possible values
            are - 1. GR_AND_HELPER - Graceful restart with Helper 2.
            HELPER_ONLY - Helper only 3. DISABLE - Disabled
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  hold_time: :class:`long` or ``None``
        :param hold_time: If a HELLO packet is not seen from BGP Peer withing hold_time then
            BGP neighbor will be marked as down. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  keep_alive_interval: :class:`long` or ``None``
        :param keep_alive_interval: Time in ms to wait for HELLO packet from BGP peer format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_update_timestamp: :class:`long` or ``None``
        :param last_update_timestamp: Timestamp when the data was last updated, unset if data source has
            never updated the data. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  local_port: :class:`long` or ``None``
        :param local_port: TCP port number of Local BGP connection format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  messages_received: :class:`long` or ``None``
        :param messages_received: Count of messages received from the neighbor format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  messages_sent: :class:`long` or ``None``
        :param messages_sent: Count of messages sent to the neighbor format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  negotiated_capability: :class:`list` of :class:`str` or ``None``
        :param negotiated_capability: BGP capabilities negotiated with BGP neighbor.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  neighbor_address: :class:`str` or ``None``
        :param neighbor_address: The IP of the BGP neighbor format: ip
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  neighbor_router_id: :class:`str` or ``None``
        :param neighbor_router_id: Router ID of the BGP neighbor.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  remote_as_number: :class:`str` or ``None``
        :param remote_as_number: AS number of the BGP neighbor
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  remote_port: :class:`long` or ``None``
        :param remote_port: TCP port number of remote BGP Connection format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  remote_site: :class:`ResourceReference` or ``None``
        :param remote_site: Remote site details.
        :type  source_address: :class:`str` or ``None``
        :param source_address: The Ip address of logical port format: ip
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  tier0_path: :class:`str` or ``None``
        :param tier0_path: Policy path to Tier0
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  time_since_established: :class:`long` or ``None``
        :param time_since_established: Time(in milliseconds) since connection was established. format:
            int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  total_in_prefix_count: :class:`long` or ``None``
        :param total_in_prefix_count: Sum of in prefixes counts across all address families. format:
            int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  total_out_prefix_count: :class:`long` or ``None``
        :param total_out_prefix_count: Sum of out prefixes counts across all address families. format:
            int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.address_families = address_families
        self.announced_capabilities = announced_capabilities
        self.connection_drop_count = connection_drop_count
        self.connection_state = connection_state
        self.edge_path = edge_path
        self.established_connection_count = established_connection_count
        self.graceful_restart_mode = graceful_restart_mode
        self.hold_time = hold_time
        self.keep_alive_interval = keep_alive_interval
        self.last_update_timestamp = last_update_timestamp
        self.local_port = local_port
        self.messages_received = messages_received
        self.messages_sent = messages_sent
        self.negotiated_capability = negotiated_capability
        self.neighbor_address = neighbor_address
        self.neighbor_router_id = neighbor_router_id
        self.remote_as_number = remote_as_number
        self.remote_port = remote_port
        self.remote_site = remote_site
        self.source_address = source_address
        self.tier0_path = tier0_path
        self.time_since_established = time_since_established
        self.total_in_prefix_count = total_in_prefix_count
        self.total_out_prefix_count = total_out_prefix_count
        VapiStruct.__init__(self)


PolicyBgpNeighborStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_bgp_neighbor_status', {
        'address_families': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'BgpAddressFamily'))),
        'announced_capabilities': type.OptionalType(type.ListType(type.StringType())),
        'connection_drop_count': type.OptionalType(type.IntegerType()),
        'connection_state': type.OptionalType(type.StringType()),
        'edge_path': type.OptionalType(type.StringType()),
        'established_connection_count': type.OptionalType(type.IntegerType()),
        'graceful_restart_mode': type.OptionalType(type.StringType()),
        'hold_time': type.OptionalType(type.IntegerType()),
        'keep_alive_interval': type.OptionalType(type.IntegerType()),
        'last_update_timestamp': type.OptionalType(type.IntegerType()),
        'local_port': type.OptionalType(type.IntegerType()),
        'messages_received': type.OptionalType(type.IntegerType()),
        'messages_sent': type.OptionalType(type.IntegerType()),
        'negotiated_capability': type.OptionalType(type.ListType(type.StringType())),
        'neighbor_address': type.OptionalType(type.StringType()),
        'neighbor_router_id': type.OptionalType(type.StringType()),
        'remote_as_number': type.OptionalType(type.StringType()),
        'remote_port': type.OptionalType(type.IntegerType()),
        'remote_site': type.OptionalType(type.ReferenceType(__name__, 'ResourceReference')),
        'source_address': type.OptionalType(type.StringType()),
        'tier0_path': type.OptionalType(type.StringType()),
        'time_since_established': type.OptionalType(type.IntegerType()),
        'total_in_prefix_count': type.OptionalType(type.IntegerType()),
        'total_out_prefix_count': type.OptionalType(type.IntegerType()),
    },
    PolicyBgpNeighborStatus,
    False,
    None))



class PolicyBgpNeighborsStatusListResult(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`PolicyBgpNeighborStatus` or ``None``
        :param results: Status of BGP neighbors of the Tier0
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


PolicyBgpNeighborsStatusListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_bgp_neighbors_status_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyBgpNeighborStatus'))),
    },
    PolicyBgpNeighborsStatusListResult,
    False,
    None))



class PolicyCapacityDashboardUsage(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    USAGE_TYPE_VSPHERE_CLUSTERS = "NUMBER_OF_VSPHERE_CLUSTERS"
    """


    """
    USAGE_TYPE_PREPARED_HOSTS = "NUMBER_OF_PREPARED_HOSTS"
    """


    """
    USAGE_TYPE_GROUPS = "NUMBER_OF_GROUPS"
    """


    """
    USAGE_TYPE_SEGMENT = "NUMBER_OF_SEGMENT"
    """


    """
    USAGE_TYPE_SEGMENT_PORT = "NUMBER_OF_SEGMENT_PORT"
    """


    """
    USAGE_TYPE_FIREWALL_RULES = "NUMBER_OF_FIREWALL_RULES"
    """


    """
    USAGE_TYPE_FIREWALL_SECTIONS = "NUMBER_OF_FIREWALL_SECTIONS"
    """


    """
    USAGE_TYPE_SECURITY_POLICY_RULES = "NUMBER_OF_SECURITY_POLICY_RULES"
    """


    """
    USAGE_TYPE_SECURITY_POLICY = "NUMBER_OF_SECURITY_POLICY"
    """


    """
    USAGE_TYPE_PROTECTION_ENABLED_HOST = "NUMBER_OF_PROTECTION_ENABLED_HOST"
    """


    """
    USAGE_TYPE_PROTECTION_ENABLED_VIRTUAL_MACHINES = "NUMBER_OF_PROTECTION_ENABLED_VIRTUAL_MACHINES"
    """


    """
    USAGE_TYPE_EDGE_CLUSTERS = "NUMBER_OF_EDGE_CLUSTERS"
    """


    """
    USAGE_TYPE_EDGE_NODES = "NUMBER_OF_EDGE_NODES"
    """


    """
    USAGE_TYPE_TIER0_ROUTERS = "NUMBER_OF_TIER0_ROUTERS"
    """


    """
    USAGE_TYPE_TIER1_ROUTERS = "NUMBER_OF_TIER1_ROUTERS"
    """


    """
    USAGE_TYPE_PREFIX_LIST = "NUMBER_OF_PREFIX_LIST"
    """


    """
    USAGE_TYPE_NAT_RULES = "NUMBER_OF_NAT_RULES"
    """


    """
    USAGE_TYPE_DHCP_IP_POOLS = "NUMBER_OF_DHCP_IP_POOLS"
    """


    """
    USAGE_TYPE_TIER1_WITH_NAT_RULE = "NUMBER_OF_TIER1_WITH_NAT_RULE"
    """


    """



    _canonical_to_pep_names = {
                            'current_usage_count': 'current_usage_count',
                            'current_usage_percentage': 'current_usage_percentage',
                            'display_name': 'display_name',
                            'max_supported_count': 'max_supported_count',
                            'usage_type': 'usage_type',
                            }

    def __init__(self,
                 current_usage_count=None,
                 current_usage_percentage=None,
                 display_name=None,
                 max_supported_count=None,
                 usage_type=None,
                ):
        """
        :type  current_usage_count: :class:`long` or ``None``
        :param current_usage_count: Indicate the current usage count of object type. format: int64
        :type  current_usage_percentage: :class:`float` or ``None``
        :param current_usage_percentage: Current usage percentage for object type
        :type  display_name: :class:`str` or ``None``
        :param display_name: Display name for NSX object type.
        :type  max_supported_count: :class:`long` or ``None``
        :param max_supported_count: This is the maximum supported count for object type in
            consideration. format: int64
        :type  usage_type: :class:`str` or ``None``
        :param usage_type: Possible values are: 
            
            * :attr:`PolicyCapacityDashboardUsage.USAGE_TYPE_VSPHERE_CLUSTERS`
            * :attr:`PolicyCapacityDashboardUsage.USAGE_TYPE_PREPARED_HOSTS`
            * :attr:`PolicyCapacityDashboardUsage.USAGE_TYPE_GROUPS`
            * :attr:`PolicyCapacityDashboardUsage.USAGE_TYPE_SEGMENT`
            * :attr:`PolicyCapacityDashboardUsage.USAGE_TYPE_SEGMENT_PORT`
            * :attr:`PolicyCapacityDashboardUsage.USAGE_TYPE_FIREWALL_RULES`
            * :attr:`PolicyCapacityDashboardUsage.USAGE_TYPE_FIREWALL_SECTIONS`
            *
              :attr:`PolicyCapacityDashboardUsage.USAGE_TYPE_SECURITY_POLICY_RULES`
            * :attr:`PolicyCapacityDashboardUsage.USAGE_TYPE_SECURITY_POLICY`
            *
              :attr:`PolicyCapacityDashboardUsage.USAGE_TYPE_PROTECTION_ENABLED_HOST`
            *
              :attr:`PolicyCapacityDashboardUsage.USAGE_TYPE_PROTECTION_ENABLED_VIRTUAL_MACHINES`
            * :attr:`PolicyCapacityDashboardUsage.USAGE_TYPE_EDGE_CLUSTERS`
            * :attr:`PolicyCapacityDashboardUsage.USAGE_TYPE_EDGE_NODES`
            * :attr:`PolicyCapacityDashboardUsage.USAGE_TYPE_TIER0_ROUTERS`
            * :attr:`PolicyCapacityDashboardUsage.USAGE_TYPE_TIER1_ROUTERS`
            * :attr:`PolicyCapacityDashboardUsage.USAGE_TYPE_PREFIX_LIST`
            * :attr:`PolicyCapacityDashboardUsage.USAGE_TYPE_NAT_RULES`
            * :attr:`PolicyCapacityDashboardUsage.USAGE_TYPE_DHCP_IP_POOLS`
            *
              :attr:`PolicyCapacityDashboardUsage.USAGE_TYPE_TIER1_WITH_NAT_RULE`
            
             Indicate the object type for which usage is calculated.
        """
        self.current_usage_count = current_usage_count
        self.current_usage_percentage = current_usage_percentage
        self.display_name = display_name
        self.max_supported_count = max_supported_count
        self.usage_type = usage_type
        VapiStruct.__init__(self)


PolicyCapacityDashboardUsage._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_capacity_dashboard_usage', {
        'current_usage_count': type.OptionalType(type.IntegerType()),
        'current_usage_percentage': type.OptionalType(type.DoubleType()),
        'display_name': type.OptionalType(type.StringType()),
        'max_supported_count': type.OptionalType(type.IntegerType()),
        'usage_type': type.OptionalType(type.StringType()),
    },
    PolicyCapacityDashboardUsage,
    False,
    None))



class PolicyCapacityUsageResponse(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'capacity_usage': 'capacity_usage',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 capacity_usage=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  capacity_usage: :class:`list` of :class:`PolicyCapacityDashboardUsage` or ``None``
        :param capacity_usage: List of capacity usage for NSX Objects
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.capacity_usage = capacity_usage
        VapiStruct.__init__(self)


PolicyCapacityUsageResponse._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_capacity_usage_response', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'capacity_usage': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyCapacityDashboardUsage'))),
    },
    PolicyCapacityUsageResponse,
    False,
    None))



class PolicyComplianceStatus(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'last_updated_time': 'last_updated_time',
                            'non_compliant_configs': 'non_compliant_configs',
                            }

    def __init__(self,
                 last_updated_time=None,
                 non_compliant_configs=None,
                ):
        """
        :type  last_updated_time: :class:`long` or ``None``
        :param last_updated_time: Timestamp of last update format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  non_compliant_configs: :class:`list` of :class:`PolicyNonCompliantConfig` or ``None``
        :param non_compliant_configs: List of non compliant configuration and impacted services
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.last_updated_time = last_updated_time
        self.non_compliant_configs = non_compliant_configs
        VapiStruct.__init__(self)


PolicyComplianceStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_compliance_status', {
        'last_updated_time': type.OptionalType(type.IntegerType()),
        'non_compliant_configs': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyNonCompliantConfig'))),
    },
    PolicyComplianceStatus,
    False,
    None))



class PolicyConfigResource(VapiStruct):
    """
    Represents an object on the desired state.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        VapiStruct.__init__(self)


PolicyConfigResource._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_config_resource', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
    },
    PolicyConfigResource,
    False,
    None))



class PolicyContextProfile(VapiStruct):
    """
    An entity that encapsulates attributes and sub-attributes of various
    network services (eg. L7 services, domain name, encryption algorithm) The
    entity will be consumed in firewall rules and can be added in new tuple
    called profile in firewall rules. To get a list of supported attributes and
    sub-attributes fire the following REST API GET
    https://&lt;policy-mgr&gt;/policy/api/v1/infra/context-profiles/attributes

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'attributes': 'attributes',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 attributes=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  attributes: :class:`list` of :class:`PolicyAttributes` or ``None``
        :param attributes: Property containing attributes/sub-attributes for Policy Context
            Profile.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.attributes = attributes
        VapiStruct.__init__(self)


PolicyContextProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_context_profile', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'attributes': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyAttributes'))),
    },
    PolicyContextProfile,
    False,
    None))



class PolicyContextProfileListResult(VapiStruct):
    """
    List result of PolicyContextProfiles

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`PolicyContextProfile` or ``None``
        :param results: Paged collection of PolicyContextProfiles
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


PolicyContextProfileListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_context_profile_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyContextProfile'))),
    },
    PolicyContextProfileListResult,
    False,
    None))



class PolicyDnsAnswerPerEnforcementPoint(VapiStruct):
    """
    DNS forwarder nslookup answer per enforcement point.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "PolicyDnsAnswerPerEnforcementPoint"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    RESOURCE_TYPE_NSXTDNSANSWER = "NsxTDnsAnswer"
    """


    """



    _canonical_to_pep_names = {
                            'enforcement_point_path': 'enforcement_point_path',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 enforcement_point_path=None,
                 resource_type='PolicyDnsAnswerPerEnforcementPoint',
                ):
        """
        :type  enforcement_point_path: :class:`str` or ``None``
        :param enforcement_point_path: Policy path referencing the enforcement point from where the DNS
            forwarder nslookup answer is fetched.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`PolicyDnsAnswerPerEnforcementPoint.RESOURCE_TYPE_NSXTDNSANSWER`
            
             Resource type of the DNS forwarder nslookup answer.
        """
        self.enforcement_point_path = enforcement_point_path
        self._resource_type = resource_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

PolicyDnsAnswerPerEnforcementPoint._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_dns_answer_per_enforcement_point', {
        'enforcement_point_path': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
    },
    PolicyDnsAnswerPerEnforcementPoint,
    False,
    None))



class PolicyDnsForwarder(VapiStruct):
    """
    Used to configure DNS Forwarder

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    LOG_LEVEL_DEBUG = "DEBUG"
    """


    """
    LOG_LEVEL_INFO = "INFO"
    """


    """
    LOG_LEVEL_WARNING = "WARNING"
    """


    """
    LOG_LEVEL_ERROR = "ERROR"
    """


    """
    LOG_LEVEL_FATAL = "FATAL"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'conditional_forwarder_zone_paths': 'conditional_forwarder_zone_paths',
                            'default_forwarder_zone_path': 'default_forwarder_zone_path',
                            'enabled': 'enabled',
                            'listener_ip': 'listener_ip',
                            'log_level': 'log_level',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 conditional_forwarder_zone_paths=None,
                 default_forwarder_zone_path=None,
                 enabled=None,
                 listener_ip=None,
                 log_level=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  conditional_forwarder_zone_paths: :class:`list` of :class:`str` or ``None``
        :param conditional_forwarder_zone_paths: Max of 5 DNS servers can be configured
        :type  default_forwarder_zone_path: :class:`str` or ``None``
        :param default_forwarder_zone_path: This is the zone to which DNS requests are forwarded by default
        :type  enabled: :class:`bool` or ``None``
        :param enabled: The flag, which suggests whether the DNS forwarder is enabled or
            disabled. The default is True.
        :type  listener_ip: :class:`str` or ``None``
        :param listener_ip: This is the IP on which the DNS Forwarder listens. format: ipv4
        :type  log_level: :class:`str` or ``None``
        :param log_level: Possible values are: 
            
            * :attr:`PolicyDnsForwarder.LOG_LEVEL_DEBUG`
            * :attr:`PolicyDnsForwarder.LOG_LEVEL_INFO`
            * :attr:`PolicyDnsForwarder.LOG_LEVEL_WARNING`
            * :attr:`PolicyDnsForwarder.LOG_LEVEL_ERROR`
            * :attr:`PolicyDnsForwarder.LOG_LEVEL_FATAL`
            
             Set log_level to DISABLED will stop dumping fowarder log.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.conditional_forwarder_zone_paths = conditional_forwarder_zone_paths
        self.default_forwarder_zone_path = default_forwarder_zone_path
        self.enabled = enabled
        self.listener_ip = listener_ip
        self.log_level = log_level
        VapiStruct.__init__(self)


PolicyDnsForwarder._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_dns_forwarder', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'conditional_forwarder_zone_paths': type.OptionalType(type.ListType(type.StringType())),
        'default_forwarder_zone_path': type.OptionalType(type.StringType()),
        'enabled': type.OptionalType(type.BooleanType()),
        'listener_ip': type.OptionalType(type.StringType()),
        'log_level': type.OptionalType(type.StringType()),
    },
    PolicyDnsForwarder,
    False,
    None))



class PolicyDnsForwarderZone(VapiStruct):
    """
    Used to configure zones on DNS Forwarder

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'dns_domain_names': 'dns_domain_names',
                            'source_ip': 'source_ip',
                            'upstream_servers': 'upstream_servers',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 dns_domain_names=None,
                 source_ip=None,
                 upstream_servers=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  dns_domain_names: :class:`list` of :class:`str` or ``None``
        :param dns_domain_names: List of domain names on which conditional forwarding is based. This
            field is required if the DNS Zone is being used for a conditional
            forwarder. This field will also be used for conditional reverse
            lookup. Example 1, if for one of the zones, one of the entries in
            the fqdn is example.com, all the DNS requests under the domain
            example.com will be served by the corresponding upstream DNS
            server. Example 2, if for one of the zones, one of the entries in
            the fqdn list is \"13.12.30.in-addr.arpa\", reverse lookup for
            30.12.13.0/24 will go to the corresponding DNS server.
        :type  source_ip: :class:`str` or ``None``
        :param source_ip: The source IP used by the DNS Forwarder zone. format: ipv4
        :type  upstream_servers: :class:`list` of :class:`str` or ``None``
        :param upstream_servers: Max of 3 DNS servers can be configured format: ipv4
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.dns_domain_names = dns_domain_names
        self.source_ip = source_ip
        self.upstream_servers = upstream_servers
        VapiStruct.__init__(self)


PolicyDnsForwarderZone._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_dns_forwarder_zone', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'dns_domain_names': type.OptionalType(type.ListType(type.StringType())),
        'source_ip': type.OptionalType(type.StringType()),
        'upstream_servers': type.OptionalType(type.ListType(type.StringType())),
    },
    PolicyDnsForwarderZone,
    False,
    None))



class PolicyDnsForwarderZoneListResult(VapiStruct):
    """
    Paged Collection of DNS Forwarder Zones

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`PolicyDnsForwarderZone` or ``None``
        :param results: Dns Forwarder Zone list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


PolicyDnsForwarderZoneListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_dns_forwarder_zone_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyDnsForwarderZone'))),
    },
    PolicyDnsForwarderZoneListResult,
    False,
    None))



class PolicyDraft(VapiStruct):
    """
    A draft which stores the system generated as well as user intended changes
    in a hierarchical body format.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'is_auto_draft': 'is_auto_draft',
                            'lock_comments': 'lock_comments',
                            'lock_modified_by': 'lock_modified_by',
                            'lock_modified_time': 'lock_modified_time',
                            'locked': 'locked',
                            'ref_draft_path': 'ref_draft_path',
                            'system_area': 'system_area',
                            'user_area': 'user_area',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 is_auto_draft=None,
                 lock_comments=None,
                 lock_modified_by=None,
                 lock_modified_time=None,
                 locked=None,
                 ref_draft_path=None,
                 system_area=None,
                 user_area=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  is_auto_draft: :class:`bool` or ``None``
        :param is_auto_draft: Flag to indicate whether draft is auto created. True indicates that
            the draft is an auto draft. False indicates that the draft is a
            manual draft.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  lock_comments: :class:`str` or ``None``
        :param lock_comments: Comments for a policy draft lock/unlock.
        :type  lock_modified_by: :class:`str` or ``None``
        :param lock_modified_by: ID of the user who last modified the lock for a policy draft.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  lock_modified_time: :class:`long` or ``None``
        :param lock_modified_time: Policy draft locked/unlocked time in epoch milliseconds. format:
            int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  locked: :class:`bool` or ``None``
        :param locked: Indicates whether a draft should be locked. If the draft is locked
            by an user, then no other user would be able to modify or publish
            this draft. Once the user releases the lock, other users can then
            modify or publish this draft.
        :type  ref_draft_path: :class:`str` or ``None``
        :param ref_draft_path: When specified, a manual draft will be created w.r.t. the specified
            draft. If not specified, manual draft will be created w.r.t. the
            current published configuration. For an auto draft, this will
            always be null.
        :type  system_area: :class:`Infra` or ``None``
        :param system_area: Configuration changes against the current configuration, tracked by
            the system. The value is stored in a hierarchical body format.
        :type  user_area: :class:`Infra` or ``None``
        :param user_area: These are user defined configuration changes, which are applicable
            only in case of manual drafts. During the publish of a draft,
            system_area changes gets applied first, and then these changes. The
            value must be in a hierarchical body format.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.is_auto_draft = is_auto_draft
        self.lock_comments = lock_comments
        self.lock_modified_by = lock_modified_by
        self.lock_modified_time = lock_modified_time
        self.locked = locked
        self.ref_draft_path = ref_draft_path
        self.system_area = system_area
        self.user_area = user_area
        VapiStruct.__init__(self)


PolicyDraft._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_draft', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'is_auto_draft': type.OptionalType(type.BooleanType()),
        'lock_comments': type.OptionalType(type.StringType()),
        'lock_modified_by': type.OptionalType(type.StringType()),
        'lock_modified_time': type.OptionalType(type.IntegerType()),
        'locked': type.OptionalType(type.BooleanType()),
        'ref_draft_path': type.OptionalType(type.StringType()),
        'system_area': type.OptionalType(type.ReferenceType(__name__, 'Infra')),
        'user_area': type.OptionalType(type.ReferenceType(__name__, 'Infra')),
    },
    PolicyDraft,
    False,
    None))



class PolicyDraftListResult(VapiStruct):
    """
    This holds the list of policy drafts.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`PolicyDraft` or ``None``
        :param results: Paginated list of policy drafts.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


PolicyDraftListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_draft_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyDraft'))),
    },
    PolicyDraftListResult,
    False,
    None))



class PolicyEdgeCluster(VapiStruct):
    """
    Edge Cluster.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'inter_site_forwarding_enabled': 'inter_site_forwarding_enabled',
                            'nsx_id': 'nsx_id',
                            'rtep_ips': 'rtep_ips',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 inter_site_forwarding_enabled=None,
                 nsx_id=None,
                 rtep_ips=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  inter_site_forwarding_enabled: :class:`bool` or ``None``
        :param inter_site_forwarding_enabled: Flag to indicate status of inter site l2 and l3 forwarding in
            federation.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  nsx_id: :class:`str` or ``None``
        :param nsx_id: UUID of Edge Cluster on NSX-T enforcement point.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  rtep_ips: :class:`list` of :class:`str` or ``None``
        :param rtep_ips: List of remote tunnel endpoint ipaddress configured on edge
            cluster. format: ip
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.inter_site_forwarding_enabled = inter_site_forwarding_enabled
        self.nsx_id = nsx_id
        self.rtep_ips = rtep_ips
        VapiStruct.__init__(self)


PolicyEdgeCluster._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_edge_cluster', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'inter_site_forwarding_enabled': type.OptionalType(type.BooleanType()),
        'nsx_id': type.OptionalType(type.StringType()),
        'rtep_ips': type.OptionalType(type.ListType(type.StringType())),
    },
    PolicyEdgeCluster,
    False,
    None))



class PolicyEdgeClusterInterSiteBgpSummary(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'edge_cluster_path': 'edge_cluster_path',
                            'edge_nodes': 'edge_nodes',
                            }

    def __init__(self,
                 edge_cluster_path=None,
                 edge_nodes=None,
                ):
        """
        :type  edge_cluster_path: :class:`str` or ``None``
        :param edge_cluster_path: Edge cluster path whose status is being reported.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  edge_nodes: :class:`list` of :class:`PolicyEdgeNodeInterSiteBgpSummary` or ``None``
        :param edge_nodes: Status of all edge nodes within cluster.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.edge_cluster_path = edge_cluster_path
        self.edge_nodes = edge_nodes
        VapiStruct.__init__(self)


PolicyEdgeClusterInterSiteBgpSummary._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_edge_cluster_inter_site_bgp_summary', {
        'edge_cluster_path': type.OptionalType(type.StringType()),
        'edge_nodes': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyEdgeNodeInterSiteBgpSummary'))),
    },
    PolicyEdgeClusterInterSiteBgpSummary,
    False,
    None))



class PolicyEdgeClusterInterSiteStatus(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    OVERALL_STATUS_UP = "UP"
    """


    """
    OVERALL_STATUS_DOWN = "DOWN"
    """


    """
    OVERALL_STATUS_DEGRADED = "DEGRADED"
    """


    """
    OVERALL_STATUS_UNKNOWN = "UNKNOWN"
    """


    """



    _canonical_to_pep_names = {
                            'edge_cluster_name': 'edge_cluster_name',
                            'edge_cluster_path': 'edge_cluster_path',
                            'last_update_timestamp': 'last_update_timestamp',
                            'member_status': 'member_status',
                            'overall_status': 'overall_status',
                            }

    def __init__(self,
                 edge_cluster_name=None,
                 edge_cluster_path=None,
                 last_update_timestamp=None,
                 member_status=None,
                 overall_status=None,
                ):
        """
        :type  edge_cluster_name: :class:`str` or ``None``
        :param edge_cluster_name: Name of the edge cluster whose status is being reported.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  edge_cluster_path: :class:`str` or ``None``
        :param edge_cluster_path: Policy path of the edge cluster whose status is being reported.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_update_timestamp: :class:`long` or ``None``
        :param last_update_timestamp: Timestamp when the edge cluster inter-site status was last updated.
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  member_status: :class:`list` of :class:`PolicyEdgeClusterMemberInterSiteStatus` or ``None``
        :param member_status: Per edge node inter-site status.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overall_status: :class:`str` or ``None``
        :param overall_status: Possible values are: 
            
            * :attr:`PolicyEdgeClusterInterSiteStatus.OVERALL_STATUS_UP`
            * :attr:`PolicyEdgeClusterInterSiteStatus.OVERALL_STATUS_DOWN`
            * :attr:`PolicyEdgeClusterInterSiteStatus.OVERALL_STATUS_DEGRADED`
            * :attr:`PolicyEdgeClusterInterSiteStatus.OVERALL_STATUS_UNKNOWN`
            
             Overall status of all edge nodes IBGP status in the edge cluster.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.edge_cluster_name = edge_cluster_name
        self.edge_cluster_path = edge_cluster_path
        self.last_update_timestamp = last_update_timestamp
        self.member_status = member_status
        self.overall_status = overall_status
        VapiStruct.__init__(self)


PolicyEdgeClusterInterSiteStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_edge_cluster_inter_site_status', {
        'edge_cluster_name': type.OptionalType(type.StringType()),
        'edge_cluster_path': type.OptionalType(type.StringType()),
        'last_update_timestamp': type.OptionalType(type.IntegerType()),
        'member_status': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyEdgeClusterMemberInterSiteStatus'))),
        'overall_status': type.OptionalType(type.StringType()),
    },
    PolicyEdgeClusterInterSiteStatus,
    False,
    None))



class PolicyEdgeClusterListResult(VapiStruct):
    """
    Paged Collection of Edge Cluster

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`PolicyEdgeCluster` or ``None``
        :param results: Edge Cluster list result.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


PolicyEdgeClusterListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_edge_cluster_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyEdgeCluster'))),
    },
    PolicyEdgeClusterListResult,
    False,
    None))



class PolicyEdgeClusterMemberInterSiteStatus(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    STATUS_UP = "UP"
    """


    """
    STATUS_DOWN = "DOWN"
    """


    """
    STATUS_DEGRADED = "DEGRADED"
    """


    """
    STATUS_UNKNOWN = "UNKNOWN"
    """


    """



    _canonical_to_pep_names = {
                            'edge_node_path': 'edge_node_path',
                            'established_bgp_sessions': 'established_bgp_sessions',
                            'neighbor_status': 'neighbor_status',
                            'status': 'status',
                            'total_bgp_sessions': 'total_bgp_sessions',
                            }

    def __init__(self,
                 edge_node_path=None,
                 established_bgp_sessions=None,
                 neighbor_status=None,
                 status=None,
                 total_bgp_sessions=None,
                ):
        """
        :type  edge_node_path: :class:`ResourceReference` or ``None``
        :param edge_node_path: Edge node details from where the status is being retrived.
        :type  established_bgp_sessions: :class:`long` or ``None``
        :param established_bgp_sessions: Total number of current established inter-site IBGP sessions.
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  neighbor_status: :class:`list` of :class:`PolicyBgpNeighborStatus` or ``None``
        :param neighbor_status: Inter-site BGP neighbor status.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  status: :class:`str` or ``None``
        :param status: Possible values are: 
            
            * :attr:`PolicyEdgeClusterMemberInterSiteStatus.STATUS_UP`
            * :attr:`PolicyEdgeClusterMemberInterSiteStatus.STATUS_DOWN`
            * :attr:`PolicyEdgeClusterMemberInterSiteStatus.STATUS_DEGRADED`
            * :attr:`PolicyEdgeClusterMemberInterSiteStatus.STATUS_UNKNOWN`
            
             Edge node IBGP status
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  total_bgp_sessions: :class:`long` or ``None``
        :param total_bgp_sessions: Total number of inter-site IBGP sessions. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.edge_node_path = edge_node_path
        self.established_bgp_sessions = established_bgp_sessions
        self.neighbor_status = neighbor_status
        self.status = status
        self.total_bgp_sessions = total_bgp_sessions
        VapiStruct.__init__(self)


PolicyEdgeClusterMemberInterSiteStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_edge_cluster_member_inter_site_status', {
        'edge_node_path': type.OptionalType(type.ReferenceType(__name__, 'ResourceReference')),
        'established_bgp_sessions': type.OptionalType(type.IntegerType()),
        'neighbor_status': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyBgpNeighborStatus'))),
        'status': type.OptionalType(type.StringType()),
        'total_bgp_sessions': type.OptionalType(type.IntegerType()),
    },
    PolicyEdgeClusterMemberInterSiteStatus,
    False,
    None))



class PolicyEdgeNode(VapiStruct):
    """
    This object serves as a representation of the edge cluster index to which
    the edge node connects. It should not be mistaken for the edge / transport
    node itself. Consuming services can refer to the nsx_id property to fetch
    the UUID of the edge / transport node that is attached to this index.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'member_index': 'member_index',
                            'nsx_id': 'nsx_id',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 member_index=None,
                 nsx_id=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  member_index: :class:`long` or ``None``
        :param member_index: The numerical value of the member index in the edge cluster that
            this object represents and to which the edge node connects. format:
            int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  nsx_id: :class:`str` or ``None``
        :param nsx_id: UUID of edge node on NSX-T enforcement point.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.member_index = member_index
        self.nsx_id = nsx_id
        VapiStruct.__init__(self)


PolicyEdgeNode._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_edge_node', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'member_index': type.OptionalType(type.IntegerType()),
        'nsx_id': type.OptionalType(type.StringType()),
    },
    PolicyEdgeNode,
    False,
    None))



class PolicyEdgeNodeInterSiteBgpSummary(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'edge_node_path': 'edge_node_path',
                            'last_update_timestamp': 'last_update_timestamp',
                            'neighbor_status': 'neighbor_status',
                            }

    def __init__(self,
                 edge_node_path=None,
                 last_update_timestamp=None,
                 neighbor_status=None,
                ):
        """
        :type  edge_node_path: :class:`str` or ``None``
        :param edge_node_path: Edge node path whose status is being reported.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_update_timestamp: :class:`long` or ``None``
        :param last_update_timestamp: Timestamp when the inter-site IBGP neighbors status was last
            updated. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  neighbor_status: :class:`list` of :class:`PolicyBgpNeighborStatus` or ``None``
        :param neighbor_status: Status of all inter-site IBGP neighbors.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.edge_node_path = edge_node_path
        self.last_update_timestamp = last_update_timestamp
        self.neighbor_status = neighbor_status
        VapiStruct.__init__(self)


PolicyEdgeNodeInterSiteBgpSummary._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_edge_node_inter_site_bgp_summary', {
        'edge_node_path': type.OptionalType(type.StringType()),
        'last_update_timestamp': type.OptionalType(type.IntegerType()),
        'neighbor_status': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyBgpNeighborStatus'))),
    },
    PolicyEdgeNodeInterSiteBgpSummary,
    False,
    None))



class PolicyEdgeNodeListResult(VapiStruct):
    """
    Paged Collection of Edge Node

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`PolicyEdgeNode` or ``None``
        :param results: Edge Node list result.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


PolicyEdgeNodeListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_edge_node_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyEdgeNode'))),
    },
    PolicyEdgeNodeListResult,
    False,
    None))



class PolicyExcludeList(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'members': 'members',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 members=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  members: :class:`list` of :class:`str` or ``None``
        :param members: List of the members in the exclude list
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.members = members
        VapiStruct.__init__(self)


PolicyExcludeList._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_exclude_list', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'members': type.OptionalType(type.ListType(type.StringType())),
    },
    PolicyExcludeList,
    False,
    None))



class PolicyFineTuningResourceInfo(VapiStruct):
    """
    It represent the resource with details of name and fields it owns.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'fields': 'fields',
                            'resource_name': 'resource_name',
                            }

    def __init__(self,
                 fields=None,
                 resource_name=None,
                ):
        """
        :type  fields: :class:`list` of :class:`PolicyFineTuningResourceInfoDetail` or ``None``
        :param fields: List of all field of any resource
        :type  resource_name: :class:`str` or ``None``
        :param resource_name: It will represent resource with name and fields.
        """
        self.fields = fields
        self.resource_name = resource_name
        VapiStruct.__init__(self)


PolicyFineTuningResourceInfo._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_fine_tuning_resource_info', {
        'fields': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyFineTuningResourceInfoDetail'))),
        'resource_name': type.OptionalType(type.StringType()),
    },
    PolicyFineTuningResourceInfo,
    False,
    None))



class PolicyFineTuningResourceInfoDetail(VapiStruct):
    """
    Contains the details of resource field

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'field_name': 'field_name',
                            'sub_type': 'sub_type',
                            }

    def __init__(self,
                 field_name=None,
                 sub_type=None,
                ):
        """
        :type  field_name: :class:`str` or ``None``
        :param field_name: It will represent resource with name and fields.
        :type  sub_type: :class:`PolicyFineTuningResourceInfo` or ``None``
        :param sub_type: List of all field of any resource
        """
        self.field_name = field_name
        self.sub_type = sub_type
        VapiStruct.__init__(self)


PolicyFineTuningResourceInfoDetail._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_fine_tuning_resource_info_detail', {
        'field_name': type.OptionalType(type.StringType()),
        'sub_type': type.OptionalType(type.ReferenceType(__name__, 'PolicyFineTuningResourceInfo')),
    },
    PolicyFineTuningResourceInfoDetail,
    False,
    None))



class PolicyFirewallCPUMemThresholdsProfileBindingMap(VapiStruct):
    """
    This entity will be used to establish association between CPU Memory
    Thresholds Profile and Transport Node. Using this entity, user can specify
    intent for applying Firewall CPU Memory Thresholds Profile to particular
    Transport Node.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'profile_path': 'profile_path',
                            'sequence_number': 'sequence_number',
                            'transport_nodes': 'transport_nodes',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 profile_path=None,
                 sequence_number=None,
                 transport_nodes=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  profile_path: :class:`str` or ``None``
        :param profile_path: PolicyPath of associated Profile
        :type  sequence_number: :class:`long` or ``None``
        :param sequence_number: Sequence number is used to resolve conflicts when two profiles get
            applied to a single node. Lower value gets higher precedence. Two
            binding maps having the same profile path should have the same
            sequence number. format: int64
        :type  transport_nodes: :class:`list` of :class:`PolicyResourceReference` or ``None``
        :param transport_nodes: References of transport nodes on which the profile intended to be
            applied.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.profile_path = profile_path
        self.sequence_number = sequence_number
        self.transport_nodes = transport_nodes
        VapiStruct.__init__(self)


PolicyFirewallCPUMemThresholdsProfileBindingMap._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_firewall_CPU_mem_thresholds_profile_binding_map', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'profile_path': type.OptionalType(type.StringType()),
        'sequence_number': type.OptionalType(type.IntegerType()),
        'transport_nodes': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyResourceReference'))),
    },
    PolicyFirewallCPUMemThresholdsProfileBindingMap,
    False,
    None))



class PolicyFirewallCPUMemThresholdsProfileBindingMapListResult(VapiStruct):
    """
    Paged collection of Firewall CPU Memory Thresholds Profile Binding Maps

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`PolicyFirewallCPUMemThresholdsProfileBindingMap` or ``None``
        :param results: Firewall CPU Memory Thresholds Profile Binding Map list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


PolicyFirewallCPUMemThresholdsProfileBindingMapListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_firewall_CPU_mem_thresholds_profile_binding_map_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyFirewallCPUMemThresholdsProfileBindingMap'))),
    },
    PolicyFirewallCPUMemThresholdsProfileBindingMapListResult,
    False,
    None))



class PolicyFirewallCpuMemThresholdsProfile(VapiStruct):
    """
    A profile holding CPU and memory thresholds configuration.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'cpu_threshold_percentage': 'cpu_threshold_percentage',
                            'mem_threshold_percentage': 'mem_threshold_percentage',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 cpu_threshold_percentage=None,
                 mem_threshold_percentage=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  cpu_threshold_percentage: :class:`long` or ``None``
        :param cpu_threshold_percentage: CPU utilization thresholds percentage to monitor and report for
            distributed firewall. format: int64
        :type  mem_threshold_percentage: :class:`long` or ``None``
        :param mem_threshold_percentage: Heap memory thresholds percentage to monitor and report for
            distributed firewall. format: int64
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.cpu_threshold_percentage = cpu_threshold_percentage
        self.mem_threshold_percentage = mem_threshold_percentage
        VapiStruct.__init__(self)


PolicyFirewallCpuMemThresholdsProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_firewall_cpu_mem_thresholds_profile', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'cpu_threshold_percentage': type.OptionalType(type.IntegerType()),
        'mem_threshold_percentage': type.OptionalType(type.IntegerType()),
    },
    PolicyFirewallCpuMemThresholdsProfile,
    False,
    None))



class PolicyFirewallCpuMemThresholdsProfileListResult(VapiStruct):
    """
    Paged Collection of PolicyFirewallCpuMemThresholdsProfile

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`PolicyFirewallCpuMemThresholdsProfile` or ``None``
        :param results: PolicyFirewallCpuMemThresholdsProfile list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


PolicyFirewallCpuMemThresholdsProfileListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_firewall_cpu_mem_thresholds_profile_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyFirewallCpuMemThresholdsProfile'))),
    },
    PolicyFirewallCpuMemThresholdsProfileListResult,
    False,
    None))



class PolicyFirewallFloodProtectionProfileBindingMap(VapiStruct):
    """
    This entity will be used to establish association between Firewall Flood
    Protection profile and Group. Using this entity, user can specify intent
    for applying Firewall Flood Protection profile to particular Group.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'profile_path': 'profile_path',
                            'sequence_number': 'sequence_number',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 profile_path=None,
                 sequence_number=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  profile_path: :class:`str` or ``None``
        :param profile_path: PolicyPath of associated Profile
        :type  sequence_number: :class:`long` or ``None``
        :param sequence_number: Sequence number is used to resolve conflicts when two profiles get
            applied to a single port. Lower value gets higher precedence. Two
            binding maps having the same profile path should have the same
            sequence number. format: int64
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.profile_path = profile_path
        self.sequence_number = sequence_number
        VapiStruct.__init__(self)


PolicyFirewallFloodProtectionProfileBindingMap._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_firewall_flood_protection_profile_binding_map', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'profile_path': type.OptionalType(type.StringType()),
        'sequence_number': type.OptionalType(type.IntegerType()),
    },
    PolicyFirewallFloodProtectionProfileBindingMap,
    False,
    None))



class PolicyFirewallFloodProtectionProfileBindingMapListResult(VapiStruct):
    """
    Paged collection of Firewall Flood Protection Profile Binding Maps

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`PolicyFirewallFloodProtectionProfileBindingMap` or ``None``
        :param results: Firewall Flood Protection Profile Binding Map list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


PolicyFirewallFloodProtectionProfileBindingMapListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_firewall_flood_protection_profile_binding_map_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyFirewallFloodProtectionProfileBindingMap'))),
    },
    PolicyFirewallFloodProtectionProfileBindingMapListResult,
    False,
    None))



class PolicyFirewallScheduler(VapiStruct):
    """
    An entity that encapsulates attributes to schedule firewall rules to be
    active to allow or block traffic for a specific period of time. Note that
    at least one property out of \"days\", \"start_time\", \"end_time\",
    \"start_date\", \"end_date\" is required.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    DAYS_SUNDAY = "SUNDAY"
    """


    """
    DAYS_MONDAY = "MONDAY"
    """


    """
    DAYS_TUESDAY = "TUESDAY"
    """


    """
    DAYS_WEDNESDAY = "WEDNESDAY"
    """


    """
    DAYS_THURSDAY = "THURSDAY"
    """


    """
    DAYS_FRIDAY = "FRIDAY"
    """


    """
    DAYS_SATURDAY = "SATURDAY"
    """


    """
    TIMEZONE_UTC = "UTC"
    """


    """
    TIMEZONE_LOCAL = "LOCAL"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'days': 'days',
                            'end_date': 'end_date',
                            'end_time': 'end_time',
                            'recurring': 'recurring',
                            'start_date': 'start_date',
                            'start_time': 'start_time',
                            'time_interval': 'time_interval',
                            'timezone': 'timezone',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 days=None,
                 end_date=None,
                 end_time=None,
                 recurring=None,
                 start_date=None,
                 start_time=None,
                 time_interval=None,
                 timezone=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  days: :class:`list` of :class:`str` or ``None``
        :param days: Possible values are: 
            
            * :attr:`PolicyFirewallScheduler.DAYS_SUNDAY`
            * :attr:`PolicyFirewallScheduler.DAYS_MONDAY`
            * :attr:`PolicyFirewallScheduler.DAYS_TUESDAY`
            * :attr:`PolicyFirewallScheduler.DAYS_WEDNESDAY`
            * :attr:`PolicyFirewallScheduler.DAYS_THURSDAY`
            * :attr:`PolicyFirewallScheduler.DAYS_FRIDAY`
            * :attr:`PolicyFirewallScheduler.DAYS_SATURDAY`
            
            Days of week on which rules will be enforced. If property is
            omitted, then days of the week will not considered while
            calculating the firewall schedule. It should not be present when
            the recurring flag is false.
        :type  end_date: :class:`str` or ``None``
        :param end_date: End date on which schedule to end. Example, 12/22/2019.
        :type  end_time: :class:`str` or ``None``
        :param end_time: If recurring field is set false, then this field must be present.
            The schedule will be enforced till the end time of the specified
            end date. If recurring field is set true, then this field should
            not be present.
        :type  recurring: :class:`bool` or ``None``
        :param recurring: Flag to indicate whether firewall schedule recurs or not. The
            default value is true and it should be set to false when the
            firewall schedule does not recur and is a one time time interval.
        :type  start_date: :class:`str` or ``None``
        :param start_date: Start date on which schedule to start. Example, 02/22/2019.
        :type  start_time: :class:`str` or ``None``
        :param start_time: Time in 24 hour and minutes in multiple of 30. Example, 9:00. If
            recurring field is set false, then this field must be present. The
            schedule will start getting enforced from the start time of the
            specified start date. If recurring field is set true, then this
            field should not be present.
        :type  time_interval: :class:`list` of :class:`PolicyTimeIntervalValue` or ``None``
        :param time_interval: The recurring time interval in a day during which the schedule will
            be applicable. It should not be present when the recurring flag is
            false.
        :type  timezone: :class:`str` or ``None``
        :param timezone: Possible values are: 
            
            * :attr:`PolicyFirewallScheduler.TIMEZONE_UTC`
            * :attr:`PolicyFirewallScheduler.TIMEZONE_LOCAL`
            
             Host Timezone to be used to enforce firewall rules.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.days = days
        self.end_date = end_date
        self.end_time = end_time
        self.recurring = recurring
        self.start_date = start_date
        self.start_time = start_time
        self.time_interval = time_interval
        self.timezone = timezone
        VapiStruct.__init__(self)


PolicyFirewallScheduler._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_firewall_scheduler', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'days': type.OptionalType(type.ListType(type.StringType())),
        'end_date': type.OptionalType(type.StringType()),
        'end_time': type.OptionalType(type.StringType()),
        'recurring': type.OptionalType(type.BooleanType()),
        'start_date': type.OptionalType(type.StringType()),
        'start_time': type.OptionalType(type.StringType()),
        'time_interval': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyTimeIntervalValue'))),
        'timezone': type.OptionalType(type.StringType()),
    },
    PolicyFirewallScheduler,
    False,
    None))



class PolicyFirewallSchedulerListResult(VapiStruct):
    """
    List result of PolicyFirewallSchedulers

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`PolicyFirewallScheduler` or ``None``
        :param results: Paged collection of PolicyFirewallSchedulers
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


PolicyFirewallSchedulerListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_firewall_scheduler_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyFirewallScheduler'))),
    },
    PolicyFirewallSchedulerListResult,
    False,
    None))



class PolicyFirewallSessionTimerProfile(VapiStruct):
    """
    A profile holding TCP, UDP and ICMP session timeout configuration.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'icmp_error_reply': 'icmp_error_reply',
                            'icmp_first_packet': 'icmp_first_packet',
                            'tcp_closed': 'tcp_closed',
                            'tcp_closing': 'tcp_closing',
                            'tcp_established': 'tcp_established',
                            'tcp_finwait': 'tcp_finwait',
                            'tcp_first_packet': 'tcp_first_packet',
                            'tcp_opening': 'tcp_opening',
                            'udp_first_packet': 'udp_first_packet',
                            'udp_multiple': 'udp_multiple',
                            'udp_single': 'udp_single',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 icmp_error_reply=None,
                 icmp_first_packet=None,
                 tcp_closed=None,
                 tcp_closing=None,
                 tcp_established=None,
                 tcp_finwait=None,
                 tcp_first_packet=None,
                 tcp_opening=None,
                 udp_first_packet=None,
                 udp_multiple=None,
                 udp_single=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  icmp_error_reply: :class:`long` or ``None``
        :param icmp_error_reply: The timeout value for the connection after an ICMP error came back
            in response to an ICMP packet. The default value for Edges (i.e,
            Gateway, or Logical Router) may be different than Distributed
            Firewall hosts. format: int64
        :type  icmp_first_packet: :class:`long` or ``None``
        :param icmp_first_packet: The timeout value of connection in seconds after the first packet.
            This will be the initial timeout for the new ICMP flow. The default
            value for Edges (i.e, Gateway, or Logical Router) may be different
            than Distributed Firewall hosts. format: int64
        :type  tcp_closed: :class:`long` or ``None``
        :param tcp_closed: The timeout value of connection in seconds after one endpoint sends
            an RST. The default value for Edges (i.e, Gateway, or Logical
            Router) may be different than Distributed Firewall hosts. format:
            int64
        :type  tcp_closing: :class:`long` or ``None``
        :param tcp_closing: The timeout value of connection in seconds after the first FIN has
            been sent. The default value for Edges (i.e, Gateway, or Logical
            Router) may be different than Distributed Firewall hosts. format:
            int64
        :type  tcp_established: :class:`long` or ``None``
        :param tcp_established: The timeout value of connection in seconds once the connection has
            become fully established. The default value for Edges (i.e,
            Gateway,or Logical Router) may be different than Distributed
            Firewall hosts. format: int64
        :type  tcp_finwait: :class:`long` or ``None``
        :param tcp_finwait: The timeout value of connection in seconds after both FINs have
            been exchanged and connection is closed. The default value for
            Edges (i.e, Gateway, or Logical Router) may be different than
            Distributed Firewall hosts. format: int64
        :type  tcp_first_packet: :class:`long` or ``None``
        :param tcp_first_packet: The timeout value of connection in seconds after the first packet
            has been sent. The default value for Edges (i.e, Gateway, or
            Logical Router) may be different than Distributed Firewall hosts.
            format: int64
        :type  tcp_opening: :class:`long` or ``None``
        :param tcp_opening: The timeout value of connection in seconds after a second packet
            has been transferred. The default value for Edges (i.e, Gateway, or
            Logical Router) may be different than Distributed Firewall hosts.
            format: int64
        :type  udp_first_packet: :class:`long` or ``None``
        :param udp_first_packet: The timeout value of connection in seconds after the first packet.
            This will be the initial timeout for the new UDP flow. The default
            value for Edges (i.e, Gateway, or Logical Router) may be different
            than Distributed Firewall hosts. format: int64
        :type  udp_multiple: :class:`long` or ``None``
        :param udp_multiple: The timeout value of connection in seconds if both hosts have sent
            packets. The default value for Edges (i.e, Gateway, or Logical
            Router) may be different than Distributed Firewall hosts. format:
            int64
        :type  udp_single: :class:`long` or ``None``
        :param udp_single: The timeout value of connection in seconds if the source host sends
            more than one packet but the destination host has never sent one
            back. The default value for Edges (i.e, Gateway, or Logical Router)
            may be different than Distributed Firewall hosts. format: int64
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.icmp_error_reply = icmp_error_reply
        self.icmp_first_packet = icmp_first_packet
        self.tcp_closed = tcp_closed
        self.tcp_closing = tcp_closing
        self.tcp_established = tcp_established
        self.tcp_finwait = tcp_finwait
        self.tcp_first_packet = tcp_first_packet
        self.tcp_opening = tcp_opening
        self.udp_first_packet = udp_first_packet
        self.udp_multiple = udp_multiple
        self.udp_single = udp_single
        VapiStruct.__init__(self)


PolicyFirewallSessionTimerProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_firewall_session_timer_profile', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'icmp_error_reply': type.OptionalType(type.IntegerType()),
        'icmp_first_packet': type.OptionalType(type.IntegerType()),
        'tcp_closed': type.OptionalType(type.IntegerType()),
        'tcp_closing': type.OptionalType(type.IntegerType()),
        'tcp_established': type.OptionalType(type.IntegerType()),
        'tcp_finwait': type.OptionalType(type.IntegerType()),
        'tcp_first_packet': type.OptionalType(type.IntegerType()),
        'tcp_opening': type.OptionalType(type.IntegerType()),
        'udp_first_packet': type.OptionalType(type.IntegerType()),
        'udp_multiple': type.OptionalType(type.IntegerType()),
        'udp_single': type.OptionalType(type.IntegerType()),
    },
    PolicyFirewallSessionTimerProfile,
    False,
    None))



class PolicyFirewallSessionTimerProfileBindingMap(VapiStruct):
    """
    This entity will be used to establish association between Firewall Timer
    session profile and Group. Using this entity, user can specify intent for
    applying Firewall Timer session profile to particular Group.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'firewall_session_timer_profile_path': 'firewall_session_timer_profile_path',
                            'sequence_number': 'sequence_number',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 firewall_session_timer_profile_path=None,
                 sequence_number=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  firewall_session_timer_profile_path: :class:`str` or ``None``
        :param firewall_session_timer_profile_path: PolicyPath of associated Firewall Timer Session Profile
        :type  sequence_number: :class:`long` or ``None``
        :param sequence_number: Sequence number is used to resolve conflicts when two profiles get
            applied to a single port. Lower value gets higher precedence. Two
            binding maps having the same profile path should have the same
            sequence number. format: int64
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.firewall_session_timer_profile_path = firewall_session_timer_profile_path
        self.sequence_number = sequence_number
        VapiStruct.__init__(self)


PolicyFirewallSessionTimerProfileBindingMap._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_firewall_session_timer_profile_binding_map', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'firewall_session_timer_profile_path': type.OptionalType(type.StringType()),
        'sequence_number': type.OptionalType(type.IntegerType()),
    },
    PolicyFirewallSessionTimerProfileBindingMap,
    False,
    None))



class PolicyFirewallSessionTimerProfileBindingMapListResult(VapiStruct):
    """
    Paged collection of Firewall Session Timer Profile Binding Maps

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`PolicyFirewallSessionTimerProfileBindingMap` or ``None``
        :param results: Firewall Session Timer Profile Binding Map list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


PolicyFirewallSessionTimerProfileBindingMapListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_firewall_session_timer_profile_binding_map_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyFirewallSessionTimerProfileBindingMap'))),
    },
    PolicyFirewallSessionTimerProfileBindingMapListResult,
    False,
    None))



class PolicyFirewallSessionTimerProfileListResult(VapiStruct):
    """
    Paged Collection of Policy Firewall Session timeout profiles

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`PolicyFirewallSessionTimerProfile` or ``None``
        :param results: Policy Firewall Session timeout profile list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


PolicyFirewallSessionTimerProfileListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_firewall_session_timer_profile_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyFirewallSessionTimerProfile'))),
    },
    PolicyFirewallSessionTimerProfileListResult,
    False,
    None))



class PolicyGroupIPMembersListResult(VapiStruct):
    """
    Paginated collection of IP members belonging to a Group.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`str` or ``None``
        :param results: Paged Collection of IP addresses that belong to the given Group
            format: address-or-block-or-range
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


PolicyGroupIPMembersListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_group_IP_members_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.StringType())),
    },
    PolicyGroupIPMembersListResult,
    False,
    None))



class PolicyGroupMemberDetails(VapiStruct):
    """
    Details of the member belonging to a Group

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'display_name': 'display_name',
                            'id': 'id',
                            'path': 'path',
                            }

    def __init__(self,
                 display_name=None,
                 id=None,
                 path=None,
                ):
        """
        :type  display_name: :class:`str` or ``None``
        :param display_name: The display name of the member on the enforcement point
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  id: :class:`str` or ``None``
        :param id: The ID of the member on the enforcement point
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: The path of the member, if relevant
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.display_name = display_name
        self.id = id
        self.path = path
        VapiStruct.__init__(self)


PolicyGroupMemberDetails._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_group_member_details', {
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
    },
    PolicyGroupMemberDetails,
    False,
    None))



class PolicyGroupMembersListResult(VapiStruct):
    """
    Paginated collection of members belonging to a Group.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`PolicyGroupMemberDetails` or ``None``
        :param results: Paged Collection of members that belong to the given Group
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


PolicyGroupMembersListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_group_members_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyGroupMemberDetails'))),
    },
    PolicyGroupMembersListResult,
    False,
    None))



class PolicyGroupReference(VapiStruct):
    """
    Placeholder to reference group entity.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'refs': 'refs',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 refs=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  refs: :class:`list` of :class:`str` or ``None``
        :param refs: Policy entity paths referred by the group instance
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.refs = refs
        VapiStruct.__init__(self)


PolicyGroupReference._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_group_reference', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'refs': type.OptionalType(type.ListType(type.StringType())),
    },
    PolicyGroupReference,
    False,
    None))



class PolicyIPAddressInfo(VapiStruct):
    """
    Used to specify the display name and value of the IPv4Address.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'address_value': 'address_value',
                            'display_name': 'display_name',
                            'next_hop': 'next_hop',
                            }

    def __init__(self,
                 address_value=None,
                 display_name=None,
                 next_hop=None,
                ):
        """
        :type  address_value: :class:`str` or ``None``
        :param address_value: Value of the IPv4Address. format: ipv4
        :type  display_name: :class:`str` or ``None``
        :param display_name: Display name used to help identify the IPv4Address.
        :type  next_hop: :class:`str` or ``None``
        :param next_hop: Next hop used in auto-plumbing of static route. If a value is not
            provided, static route will not be auto-plumbed. format: ipv4
        """
        self.address_value = address_value
        self.display_name = display_name
        self.next_hop = next_hop
        VapiStruct.__init__(self)


PolicyIPAddressInfo._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_IP_address_info', {
        'address_value': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'next_hop': type.OptionalType(type.StringType()),
    },
    PolicyIPAddressInfo,
    False,
    None))



class PolicyIgmpProfile(VapiStruct):
    """
    IGMP profile.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'last_member_query_interval': 'last_member_query_interval',
                            'query_interval': 'query_interval',
                            'query_max_response_time': 'query_max_response_time',
                            'robustness_variable': 'robustness_variable',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 last_member_query_interval=None,
                 query_interval=None,
                 query_max_response_time=None,
                 robustness_variable=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_member_query_interval: :class:`long` or ``None``
        :param last_member_query_interval: Max Response Time inserted into Group-Specific Queries sent in
            response to Leave Group messages, and is also the amount of time
            between Group-Specific Query messages. This value may be tuned to
            modify the \"leave latency\" of the network. A reduced value
            results in reduced time to detect the loss of the last member of a
            group. format: int32
        :type  query_interval: :class:`long` or ``None``
        :param query_interval: Interval(seconds) between general IGMP host-query messages. format:
            int32
        :type  query_max_response_time: :class:`long` or ``None``
        :param query_max_response_time: The query response interval(seconds) is the maximum amount of time
            that can elapse between when the querier router sends a host-query
            message and when it receives a response from a host. Configuring
            this interval allows admins to adjust the burstiness of IGMP
            messages on the subnet; larger values make the traffic less bursty,
            as host responses are spread out over a larger interval. The number
            of seconds represented by the query_max_response_time must be less
            than the query_interval. format: int32
        :type  robustness_variable: :class:`long` or ``None``
        :param robustness_variable: The Robustness Variable allows tuning for the expected packet loss
            on a subnet. If a subnet is expected to be lossy, the Robustness
            Variable may be increased. IGMP is robust to (Robustness
            Variable-1) packet losses. The Robustness Variable must not be
            zero, and SHOULD NOT be one. format: int32
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.last_member_query_interval = last_member_query_interval
        self.query_interval = query_interval
        self.query_max_response_time = query_max_response_time
        self.robustness_variable = robustness_variable
        VapiStruct.__init__(self)


PolicyIgmpProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_igmp_profile', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'last_member_query_interval': type.OptionalType(type.IntegerType()),
        'query_interval': type.OptionalType(type.IntegerType()),
        'query_max_response_time': type.OptionalType(type.IntegerType()),
        'robustness_variable': type.OptionalType(type.IntegerType()),
    },
    PolicyIgmpProfile,
    False,
    None))



class PolicyIgmpProfileListResult(VapiStruct):
    """
    Collection of Igmp Profile.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`PolicyIgmpProfile` or ``None``
        :param results: Igmp Profile list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


PolicyIgmpProfileListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_igmp_profile_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyIgmpProfile'))),
    },
    PolicyIgmpProfileListResult,
    False,
    None))



class PolicyInsertParameters(VapiStruct):
    """
    Parameters to let the admin specify a relative position of a security
    policy or rule w.r.t to another one.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    OPERATION_TOP = "insert_top"
    """


    """
    OPERATION_BOTTOM = "insert_bottom"
    """


    """
    OPERATION_AFTER = "insert_after"
    """


    """
    OPERATION_BEFORE = "insert_before"
    """


    """



    _canonical_to_pep_names = {
                            'anchor_path': 'anchor_path',
                            'operation': 'operation',
                            }

    def __init__(self,
                 anchor_path=None,
                 operation=None,
                ):
        """
        :type  anchor_path: :class:`str` or ``None``
        :param anchor_path: The security policy/rule path if operation is 'insert_after' or
            'insert_before'
        :type  operation: :class:`str` or ``None``
        :param operation: Possible values are: 
            
            * :attr:`PolicyInsertParameters.OPERATION_TOP`
            * :attr:`PolicyInsertParameters.OPERATION_BOTTOM`
            * :attr:`PolicyInsertParameters.OPERATION_AFTER`
            * :attr:`PolicyInsertParameters.OPERATION_BEFORE`
            
             Operation
        """
        self.anchor_path = anchor_path
        self.operation = operation
        VapiStruct.__init__(self)


PolicyInsertParameters._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_insert_parameters', {
        'anchor_path': type.OptionalType(type.StringType()),
        'operation': type.OptionalType(type.StringType()),
    },
    PolicyInsertParameters,
    False,
    None))



class PolicyInterfaceStatistics(VapiStruct):
    """
    Tier0 or Tier1 interface statistics on specific Enforcement Point.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'logical_router_port_id': 'logical_router_port_id',
                            'per_node_statistics': 'per_node_statistics',
                            }

    def __init__(self,
                 logical_router_port_id=None,
                 per_node_statistics=None,
                ):
        """
        :type  logical_router_port_id: :class:`str` or ``None``
        :param logical_router_port_id: The ID of the logical router port
        :type  per_node_statistics: :class:`list` of :class:`LogicalRouterPortStatisticsPerNode` or ``None``
        :param per_node_statistics: Per Node Statistics
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.logical_router_port_id = logical_router_port_id
        self.per_node_statistics = per_node_statistics
        VapiStruct.__init__(self)


PolicyInterfaceStatistics._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_interface_statistics', {
        'logical_router_port_id': type.OptionalType(type.StringType()),
        'per_node_statistics': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'LogicalRouterPortStatisticsPerNode'))),
    },
    PolicyInterfaceStatistics,
    False,
    None))



class PolicyInterfaceStatisticsSummary(VapiStruct):
    """
    Tier0 or Tier1 interface statistics on specific Enforcement Point.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'last_update_timestamp': 'last_update_timestamp',
                            'rx': 'rx',
                            'tx': 'tx',
                            'logical_router_port_id': 'logical_router_port_id',
                            'interface_policy_path': 'interface_policy_path',
                            }

    def __init__(self,
                 last_update_timestamp=None,
                 rx=None,
                 tx=None,
                 logical_router_port_id=None,
                 interface_policy_path=None,
                ):
        """
        :type  last_update_timestamp: :class:`long` or ``None``
        :param last_update_timestamp: Timestamp when the data was last updated; unset if data source has
            never updated the data. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  rx: :class:`LogicalRouterPortCounters` or ``None``
        :param rx: 
        :type  tx: :class:`LogicalRouterPortCounters` or ``None``
        :param tx: 
        :type  logical_router_port_id: :class:`str` or ``None``
        :param logical_router_port_id: The ID of the logical router port
        :type  interface_policy_path: :class:`str` or ``None``
        :param interface_policy_path: Policy path for the interface
        """
        self.last_update_timestamp = last_update_timestamp
        self.rx = rx
        self.tx = tx
        self.logical_router_port_id = logical_router_port_id
        self.interface_policy_path = interface_policy_path
        VapiStruct.__init__(self)


PolicyInterfaceStatisticsSummary._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_interface_statistics_summary', {
        'last_update_timestamp': type.OptionalType(type.IntegerType()),
        'rx': type.OptionalType(type.ReferenceType(__name__, 'LogicalRouterPortCounters')),
        'tx': type.OptionalType(type.ReferenceType(__name__, 'LogicalRouterPortCounters')),
        'logical_router_port_id': type.OptionalType(type.StringType()),
        'interface_policy_path': type.OptionalType(type.StringType()),
    },
    PolicyInterfaceStatisticsSummary,
    False,
    None))



class PolicyLabel(VapiStruct):
    """
    Label to reference group of policy entities of same type.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'refs': 'refs',
                            'type': 'type',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 refs=None,
                 type=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  refs: :class:`list` of :class:`str` or ``None``
        :param refs: Policy entity paths referred by the label instance
        :type  type: :class:`str` or ``None``
        :param type: Policy intent entity type from PolicyResourceType
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.refs = refs
        self.type = type
        VapiStruct.__init__(self)


PolicyLabel._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_label', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'refs': type.OptionalType(type.ListType(type.StringType())),
        'type': type.OptionalType(type.StringType()),
    },
    PolicyLabel,
    False,
    None))



class PolicyLabelListResult(VapiStruct):
    """
    Paged Collection of Domains

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`PolicyLabel` or ``None``
        :param results: Policy label list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


PolicyLabelListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_label_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyLabel'))),
    },
    PolicyLabelListResult,
    False,
    None))



class PolicyLbMonitorProfile(VapiStruct):
    """
    All the types of PolicyLbMonitorProfile extend from this abstract class.
    This is present for extensibility.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "PolicyLbMonitorProfile"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    RESOURCE_TYPE_TCPPOLICYLBMONITORPROFILE = "TcpPolicyLbMonitorProfile"
    """


    """
    RESOURCE_TYPE_UDPPOLICYLBMONITORPROFILE = "UdpPolicyLbMonitorProfile"
    """


    """
    RESOURCE_TYPE_ICMPPOLICYLBMONITORPROFILE = "IcmpPolicyLbMonitorProfile"
    """


    """
    RESOURCE_TYPE_HTTPPOLICYLBMONITORPROFILE = "HttpPolicyLbMonitorProfile"
    """


    """
    RESOURCE_TYPE_HTTPSPOLICYLBMONITORPROFILE = "HttpsPolicyLbMonitorProfile"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'fall_count': 'fall_count',
                            'interval': 'interval',
                            'monitor_port': 'monitor_port',
                            'rise_count': 'rise_count',
                            'timeout': 'timeout',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='PolicyLbMonitorProfile',
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 fall_count=None,
                 interval=None,
                 monitor_port=None,
                 rise_count=None,
                 timeout=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`PolicyLbMonitorProfile.RESOURCE_TYPE_TCPPOLICYLBMONITORPROFILE`
            *
              :attr:`PolicyLbMonitorProfile.RESOURCE_TYPE_UDPPOLICYLBMONITORPROFILE`
            *
              :attr:`PolicyLbMonitorProfile.RESOURCE_TYPE_ICMPPOLICYLBMONITORPROFILE`
            *
              :attr:`PolicyLbMonitorProfile.RESOURCE_TYPE_HTTPPOLICYLBMONITORPROFILE`
            *
              :attr:`PolicyLbMonitorProfile.RESOURCE_TYPE_HTTPSPOLICYLBMONITORPROFILE`
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  fall_count: :class:`long` or ``None``
        :param fall_count: Only if a healthcheck fails consecutively for a specified number of
            times, given with fall_count, to a member will the member status be
            marked DOWN. format: int64
        :type  interval: :class:`long` or ``None``
        :param interval: Active healthchecks are initiated periodically, at a configurable
            interval (in seconds), to each member of the Group. format: int64
        :type  monitor_port: :class:`long` or ``None``
        :param monitor_port: Typically, monitors perform healthchecks to Group members using the
            member IP address and pool_port. However, in some cases, customers
            prefer to run healthchecks against a different port than the pool
            member port which handles actual application traffic. In such
            cases, the port to run healthchecks against can be specified in the
            monitor_port value. format: int32
        :type  rise_count: :class:`long` or ``None``
        :param rise_count: Once a member is DOWN, a specified number of consecutive successful
            healthchecks specified by rise_count will bring the member back to
            UP state. format: int64
        :type  timeout: :class:`long` or ``None``
        :param timeout: Timeout specified in seconds. After a healthcheck is initiated, if
            it does not complete within a certain period, then also the
            healthcheck is considered to be unsuccessful. Completing a
            healthcheck within timeout means establishing a connection (TCP or
            SSL), if applicable, sending the request and receiving the
            response, all within the configured timeout. format: int64
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.fall_count = fall_count
        self.interval = interval
        self.monitor_port = monitor_port
        self.rise_count = rise_count
        self.timeout = timeout
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

PolicyLbMonitorProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_lb_monitor_profile', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'fall_count': type.OptionalType(type.IntegerType()),
        'interval': type.OptionalType(type.IntegerType()),
        'monitor_port': type.OptionalType(type.IntegerType()),
        'rise_count': type.OptionalType(type.IntegerType()),
        'timeout': type.OptionalType(type.IntegerType()),
    },
    PolicyLbMonitorProfile,
    False,
    None))



class PolicyLbPersistenceProfile(VapiStruct):
    """
    Some applications maintain state and require all relevant connections to be
    sent to the same server as the application state is not synchronized among
    servers. Persistence is enabled on a PolicyLbVirtualServer by binding a
    persistence profile to it.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "PolicyLbPersistenceProfile"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    RESOURCE_TYPE_L4POLICYLBPERSISTENCEPROFILE = "L4PolicyLbPersistenceProfile"
    """


    """
    RESOURCE_TYPE_L7POLICYLBPERSISTENCEPROFILE = "L7PolicyLbPersistenceProfile"
    """


    """
    RESOURCE_TYPE_CUSTOMPOLICYLBPERSISTENCEPROFILE = "CustomPolicyLbPersistenceProfile"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='PolicyLbPersistenceProfile',
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`PolicyLbPersistenceProfile.RESOURCE_TYPE_L4POLICYLBPERSISTENCEPROFILE`
            *
              :attr:`PolicyLbPersistenceProfile.RESOURCE_TYPE_L7POLICYLBPERSISTENCEPROFILE`
            *
              :attr:`PolicyLbPersistenceProfile.RESOURCE_TYPE_CUSTOMPOLICYLBPERSISTENCEPROFILE`
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

PolicyLbPersistenceProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_lb_persistence_profile', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
    },
    PolicyLbPersistenceProfile,
    False,
    None))



class PolicyLbPoolAccess(VapiStruct):
    """
    Defining access of a Group from a PolicyLbVirtualServer and binding to
    PolicyLbMonitorProfile.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    ALGORITHM_ROUND_ROBIN = "ROUND_ROBIN"
    """


    """
    ALGORITHM_LEAST_CONNECTION = "LEAST_CONNECTION"
    """


    """
    SOURCE_NAT_ENABLED = "ENABLED"
    """


    """
    SOURCE_NAT_DISABLED = "DISABLED"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'algorithm': 'algorithm',
                            'ip_port_list': 'ip_port_list',
                            'lb_monitor_profile': 'lb_monitor_profile',
                            'pool_port': 'pool_port',
                            'source_nat': 'source_nat',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 algorithm=None,
                 ip_port_list=None,
                 lb_monitor_profile=None,
                 pool_port=None,
                 source_nat=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  algorithm: :class:`str` or ``None``
        :param algorithm: Possible values are: 
            
            * :attr:`PolicyLbPoolAccess.ALGORITHM_ROUND_ROBIN`
            * :attr:`PolicyLbPoolAccess.ALGORITHM_LEAST_CONNECTION`
            
            Load balanding algorithm controls how the incoming connections are
            distributed among the members. - ROUND_ROBIN - requests to the
            application servers are distributed in a round-robin fashion, -
            LEAST_CONNECTION - next request is assigned to the server with the
            least number of active connections
        :type  ip_port_list: :class:`list` of :class:`IPAddressPortPair` or ``None``
        :param ip_port_list: IP Port list for applications within the Group to allow for
            non-uniform port usage by applications
        :type  lb_monitor_profile: :class:`str` or ``None``
        :param lb_monitor_profile: Path of the PolicyLbMonitorProfile to actively monitor the
            PolicyLbPoolAccess's Group
        :type  pool_port: :class:`long` or ``None``
        :param pool_port: Port for LoadBalancer to send connections to the
            PolicyLbPoolAccess's Group. Pool_port could be optional, if it is
            not specified, LB will use PolicyLbVirtualServer port to connect to
            backend servers. If the PolicyLbMonitorProfile is configured in
            PolicyLbPoolAccess and active monitor IP protocol is TCP/UDP(which
            requires TCP or UDP port number), monitor_port should be specified
            if pool_port is unset. format: int32
        :type  source_nat: :class:`str` or ``None``
        :param source_nat: Possible values are: 
            
            * :attr:`PolicyLbPoolAccess.SOURCE_NAT_ENABLED`
            * :attr:`PolicyLbPoolAccess.SOURCE_NAT_DISABLED`
            
            Depending on the topology, Source NAT (SNAT) may be required to
            ensure traffic from the server destined to the client is received
            by the load balancer. SNAT can be enabled per pool. If SNAT is not
            enabled for a pool, then load balancer uses the client IP and port
            (spoofing) while establishing connections to the servers. This is
            referred to as no-SNAT or TRANSPARENT mode. SNAT is enabled by
            default and will use the load balancer interface IP and an
            ephemeral port as the source IP and port of the server side
            connection.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.algorithm = algorithm
        self.ip_port_list = ip_port_list
        self.lb_monitor_profile = lb_monitor_profile
        self.pool_port = pool_port
        self.source_nat = source_nat
        VapiStruct.__init__(self)


PolicyLbPoolAccess._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_lb_pool_access', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'algorithm': type.OptionalType(type.StringType()),
        'ip_port_list': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'IPAddressPortPair'))),
        'lb_monitor_profile': type.OptionalType(type.StringType()),
        'pool_port': type.OptionalType(type.IntegerType()),
        'source_nat': type.OptionalType(type.StringType()),
    },
    PolicyLbPoolAccess,
    False,
    None))



class PolicyLbRule(VapiStruct):
    """
    Binding of a LbPoolAccess and Group to a PolicyLbVirtualServer used to
    route application traffic passing through load balancers. PolicyLbRule uses
    match conditions to match application traffic passing through a
    PolicyLbVirtualServer using HTTP or HTTPS. Can bind multiple
    PolicyLbVirtualServers to a Group. Each PolicyLbRule consists of two
    optional match conditions, each match contidion defines a criterion for
    application traffic. If no match conditions are specified, then the
    PolicyLbRule will always match and it is used typically to define default
    rules. If more than one match condition is specified, then matching
    strategy determines if all conditions should match or any one condition
    should match for the PolicyLbRule to be considered a match. A match
    indicates that the PolicyLbVirtualServer should route the request to the
    Group (parent of PolicyLbRule).

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    MATCH_STRATEGY_ALL = "ALL"
    """


    """
    MATCH_STRATEGY_ANY = "ANY"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'host_match': 'host_match',
                            'lb_virtual_server': 'lb_virtual_server',
                            'match_strategy': 'match_strategy',
                            'path_match': 'path_match',
                            'sequence_number': 'sequence_number',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 host_match=None,
                 lb_virtual_server=None,
                 match_strategy=None,
                 path_match=None,
                 sequence_number=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  host_match: :class:`str` or ``None``
        :param host_match: This condition is used to match HTTP request messages by the
            specific HTTP header field, Host. The Host request header specifies
            the domain name of the server. The supplied Host HTTP header match
            condition will be matched as a regular expression. The regular
            expressions in load balancer rules use the features common to both
            Java regular expressions and Perl Compatible Regular Expressions
            (PCREs) with some restrictions. Reference http://www.pcre .org for
            PCRE and the NSX-T Administrator's Guide for the restrictions.
            Please note, when regular expressions are used in JSON (JavaScript
            Object Notation) string, every backslash character (\\) needs to be
            escaped by one additional backslash character.
        :type  lb_virtual_server: :class:`str` or ``None``
        :param lb_virtual_server: The path of PolicyLbVirtualServer to bind to this PolicyLbRule and
            its Group
        :type  match_strategy: :class:`str` or ``None``
        :param match_strategy: Possible values are: 
            
            * :attr:`PolicyLbRule.MATCH_STRATEGY_ALL`
            * :attr:`PolicyLbRule.MATCH_STRATEGY_ANY`
            
            If more than one match condition is specified, then matching
            strategy determines if all conditions should match or any one
            condition should match for the LB Rule to be considered a match. -
            ALL indicates that both host_match and path_match must match for
            this PolicyLbRule to be considered a match - ANY indicates that
            either host_match or patch match may match for this PolicyLbRule to
            be considered a match
        :type  path_match: :class:`str` or ``None``
        :param path_match: This condition is used to match URIs(Uniform Resource Identifier)
            of HTTP request messages. The URI field can be specified as a
            regluar expression. If an HTTP request message is requesting an URI
            which matches specified regular expression, it matches the
            condition. The syntax of whole URI looks like this:
            scheme:[//[user[:password]\\\\@]host[:port]][/path][?query][#fragment]
            This condition matches only the path part of entire URI. The
            path_match field is used as a regular expression to match URI path
            of HTTP requests. For example, to match any URI that has
            \"/image/\" or \"/images/\", uri field can be specified as:
            \"/image[s]?/\". The regular expressions in load balancer rules use
            the features common to both Java regular expressions and Perl
            Compatible Regular Expressions (PCREs) with some restrictions.
            Reference http://www.pcre .org for PCRE and the NSX-T
            Administrator's Guide for the restrictions. Please note, when
            regular expressions are used in JSON (JavaScript Object Notation)
            string, every backslash character (\\) needs to be escaped by one
            additional backslash character.
        :type  sequence_number: :class:`long` or ``None``
        :param sequence_number: This field is used to resolve conflicts between multiple
            PolicyLbRules associated with a single PolicyLbVirtualServer and
            will be applied numerically or low to high format: int32
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.host_match = host_match
        self.lb_virtual_server = lb_virtual_server
        self.match_strategy = match_strategy
        self.path_match = path_match
        self.sequence_number = sequence_number
        VapiStruct.__init__(self)


PolicyLbRule._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_lb_rule', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'host_match': type.OptionalType(type.StringType()),
        'lb_virtual_server': type.OptionalType(type.StringType()),
        'match_strategy': type.OptionalType(type.StringType()),
        'path_match': type.OptionalType(type.StringType()),
        'sequence_number': type.OptionalType(type.IntegerType()),
    },
    PolicyLbRule,
    False,
    None))



class PolicyLbVirtualServer(VapiStruct):
    """
    All the types of PolicyLbVirtualServer extend from this abstract class.
    This is present for extensibility.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "PolicyLbVirtualServer"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    RESOURCE_TYPE_TCPPOLICYLBVIRTUALSERVER = "TcpPolicyLbVirtualServer"
    """


    """
    RESOURCE_TYPE_UDPPOLICYLBVIRTUALSERVER = "UdpPolicyLbVirtualServer"
    """


    """
    RESOURCE_TYPE_HTTPPOLICYLBVIRTUALSERVER = "HttpPolicyLbVirtualServer"
    """


    """
    RESOURCE_TYPE_HTTPSPOLICYLBVIRTUALSERVER = "HttpsPolicyLbVirtualServer"
    """


    """
    RESOURCE_TYPE_CUSTOMPOLICYLBVIRTUALSERVER = "CustomPolicyLbVirtualServer"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'access_log_enabled': 'access_log_enabled',
                            'ip_address': 'ip_address',
                            'lb_persistence_profile': 'lb_persistence_profile',
                            'ports': 'ports',
                            'router_path': 'router_path',
                            'traffic_source': 'traffic_source',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='PolicyLbVirtualServer',
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 access_log_enabled=None,
                 ip_address=None,
                 lb_persistence_profile=None,
                 ports=None,
                 router_path=None,
                 traffic_source=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`PolicyLbVirtualServer.RESOURCE_TYPE_TCPPOLICYLBVIRTUALSERVER`
            *
              :attr:`PolicyLbVirtualServer.RESOURCE_TYPE_UDPPOLICYLBVIRTUALSERVER`
            *
              :attr:`PolicyLbVirtualServer.RESOURCE_TYPE_HTTPPOLICYLBVIRTUALSERVER`
            *
              :attr:`PolicyLbVirtualServer.RESOURCE_TYPE_HTTPSPOLICYLBVIRTUALSERVER`
            *
              :attr:`PolicyLbVirtualServer.RESOURCE_TYPE_CUSTOMPOLICYLBVIRTUALSERVER`
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  access_log_enabled: :class:`bool` or ``None``
        :param access_log_enabled: If access log is enabled, all HTTP requests sent to an L7 virtual
            server are logged to the access log file. Both successful requests
            (backend server returns 2xx) and unsuccessful requests (backend
            server returns 4xx or 5xx) are logged to access log, if enabled.
        :type  ip_address: :class:`str` or ``None``
        :param ip_address: Configures the IP address of the PolicyLbVirtualServer where it
            receives all client connections and distributes them among the
            backend servers. format: ip
        :type  lb_persistence_profile: :class:`str` or ``None``
        :param lb_persistence_profile: Path to optional object that enables persistence on a virtual
            server allowing related client connections to be sent to the same
            backend server. Persistence is disabled by default.
        :type  ports: :class:`list` of :class:`str` or ``None``
        :param ports: Ports contains a list of at least one port or port range such as
            \"80\", \"1234-1236\". Each port element in the list should be a
            single port or a single port range. format: port-or-range
        :type  router_path: :class:`str` or ``None``
        :param router_path: Path to router type object that PolicyLbVirtualServer connects to.
            The only supported router object is Network.
        :type  traffic_source: :class:`str` or ``None``
        :param traffic_source: 
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.access_log_enabled = access_log_enabled
        self.ip_address = ip_address
        self.lb_persistence_profile = lb_persistence_profile
        self.ports = ports
        self.router_path = router_path
        self.traffic_source = traffic_source
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

PolicyLbVirtualServer._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_lb_virtual_server', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'access_log_enabled': type.OptionalType(type.BooleanType()),
        'ip_address': type.OptionalType(type.StringType()),
        'lb_persistence_profile': type.OptionalType(type.StringType()),
        'ports': type.OptionalType(type.ListType(type.StringType())),
        'router_path': type.OptionalType(type.StringType()),
        'traffic_source': type.OptionalType(type.StringType()),
    },
    PolicyLbVirtualServer,
    False,
    None))



class PolicyListResult(VapiStruct):
    """
    Paged Collection of security policies

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        VapiStruct.__init__(self)


PolicyListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
    },
    PolicyListResult,
    False,
    None))



class PolicyMulticastConfig(VapiStruct):
    """
    Multicast routing configuration.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'enabled': 'enabled',
                            'igmp_profile_path': 'igmp_profile_path',
                            'pim_profile_path': 'pim_profile_path',
                            'replication_multicast_range': 'replication_multicast_range',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 enabled=None,
                 igmp_profile_path=None,
                 pim_profile_path=None,
                 replication_multicast_range=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  enabled: :class:`bool` or ``None``
        :param enabled: Enable/disable Multicast Configuration.
        :type  igmp_profile_path: :class:`str` or ``None``
        :param igmp_profile_path: Updates to IGMP profile applied on all Tier0 gateways consuming the
            configuration.
        :type  pim_profile_path: :class:`str` or ``None``
        :param pim_profile_path: Updates to PIM profile applied on all Tier0 gateways consuming the
            configuration.
        :type  replication_multicast_range: :class:`str` or ``None``
        :param replication_multicast_range: Replication multicast range. Required when enabled. format:
            ipv4-cidr-block
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.enabled = enabled
        self.igmp_profile_path = igmp_profile_path
        self.pim_profile_path = pim_profile_path
        self.replication_multicast_range = replication_multicast_range
        VapiStruct.__init__(self)


PolicyMulticastConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_multicast_config', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'enabled': type.OptionalType(type.BooleanType()),
        'igmp_profile_path': type.OptionalType(type.StringType()),
        'pim_profile_path': type.OptionalType(type.StringType()),
        'replication_multicast_range': type.OptionalType(type.StringType()),
    },
    PolicyMulticastConfig,
    False,
    None))



class PolicyMulticastForwarding(VapiStruct):
    """
    Multicast Forwarding.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'gateway_path': 'gateway_path',
                            'mcast_forwarding_per_edge': 'mcast_forwarding_per_edge',
                            }

    def __init__(self,
                 gateway_path=None,
                 mcast_forwarding_per_edge=None,
                ):
        """
        :type  gateway_path: :class:`str` or ``None``
        :param gateway_path: Policy path to Tier0 gateway.
        :type  mcast_forwarding_per_edge: :class:`list` of :class:`MulticastForwardingPerEdge` or ``None``
        :param mcast_forwarding_per_edge: 
        """
        self.gateway_path = gateway_path
        self.mcast_forwarding_per_edge = mcast_forwarding_per_edge
        VapiStruct.__init__(self)


PolicyMulticastForwarding._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_multicast_forwarding', {
        'gateway_path': type.OptionalType(type.StringType()),
        'mcast_forwarding_per_edge': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'MulticastForwardingPerEdge'))),
    },
    PolicyMulticastForwarding,
    False,
    None))



class PolicyMulticastForwardingInCsvFormat(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'file_name': 'file_name',
                            'results': 'results',
                            }

    def __init__(self,
                 file_name=None,
                 results=None,
                ):
        """
        :type  file_name: :class:`str` or ``None``
        :param file_name: File name set by HTTP server if API returns CSV result as a file.
        :type  results: :class:`list` of :class:`MulticastForwardingCsvRecord` or ``None``
        :param results: 
        """
        self.file_name = file_name
        self.results = results
        VapiStruct.__init__(self)


PolicyMulticastForwardingInCsvFormat._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_multicast_forwarding_in_csv_format', {
        'file_name': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'MulticastForwardingCsvRecord'))),
    },
    PolicyMulticastForwardingInCsvFormat,
    False,
    None))



class PolicyMulticastRoutes(VapiStruct):
    """
    Multicast Routes.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'gateway_path': 'gateway_path',
                            'mcast_routes_per_edge': 'mcast_routes_per_edge',
                            }

    def __init__(self,
                 gateway_path=None,
                 mcast_routes_per_edge=None,
                ):
        """
        :type  gateway_path: :class:`str` or ``None``
        :param gateway_path: Policy path to Tier0 gateway.
        :type  mcast_routes_per_edge: :class:`list` of :class:`MulticastRoutesPerEdge` or ``None``
        :param mcast_routes_per_edge: 
        """
        self.gateway_path = gateway_path
        self.mcast_routes_per_edge = mcast_routes_per_edge
        VapiStruct.__init__(self)


PolicyMulticastRoutes._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_multicast_routes', {
        'gateway_path': type.OptionalType(type.StringType()),
        'mcast_routes_per_edge': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'MulticastRoutesPerEdge'))),
    },
    PolicyMulticastRoutes,
    False,
    None))



class PolicyMulticastRoutesInCsvFormat(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'file_name': 'file_name',
                            'results': 'results',
                            }

    def __init__(self,
                 file_name=None,
                 results=None,
                ):
        """
        :type  file_name: :class:`str` or ``None``
        :param file_name: File name set by HTTP server if API returns CSV result as a file.
        :type  results: :class:`list` of :class:`MulticastRouteCsvRecord` or ``None``
        :param results: 
        """
        self.file_name = file_name
        self.results = results
        VapiStruct.__init__(self)


PolicyMulticastRoutesInCsvFormat._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_multicast_routes_in_csv_format', {
        'file_name': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'MulticastRouteCsvRecord'))),
    },
    PolicyMulticastRoutesInCsvFormat,
    False,
    None))



class PolicyNATRuleCounters(VapiStruct):
    """
    Gives the statistics count of a NAT rule.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'active_sessions': 'active_sessions',
                            'total_bytes': 'total_bytes',
                            'total_packets': 'total_packets',
                            }

    def __init__(self,
                 active_sessions=None,
                 total_bytes=None,
                 total_packets=None,
                ):
        """
        :type  active_sessions: :class:`long` or ``None``
        :param active_sessions: Gives the total number of active sessions. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  total_bytes: :class:`long` or ``None``
        :param total_bytes: Gives the total number of bytes. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  total_packets: :class:`long` or ``None``
        :param total_packets: Gives the total number of packets. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.active_sessions = active_sessions
        self.total_bytes = total_bytes
        self.total_packets = total_packets
        VapiStruct.__init__(self)


PolicyNATRuleCounters._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_NAT_rule_counters', {
        'active_sessions': type.OptionalType(type.IntegerType()),
        'total_bytes': type.OptionalType(type.IntegerType()),
        'total_packets': type.OptionalType(type.IntegerType()),
    },
    PolicyNATRuleCounters,
    False,
    None))



class PolicyNat(VapiStruct):
    """
    Represents NAT section. This object is created by default when
    corresponding tier-0/tier-1 is created. Under tier-0/tier-1 there will be 4
    different NATs(sections). (INTERNAL, USER, DEFAULT and NAT64).

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    NAT_TYPE_INTERNAL = "INTERNAL"
    """


    """
    NAT_TYPE_USER = "USER"
    """


    """
    NAT_TYPE_DEFAULT = "DEFAULT"
    """


    """
    NAT_TYPE_NAT64 = "NAT64"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'nat_type': 'nat_type',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 nat_type=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  nat_type: :class:`str` or ``None``
        :param nat_type: Possible values are: 
            
            * :attr:`PolicyNat.NAT_TYPE_INTERNAL`
            * :attr:`PolicyNat.NAT_TYPE_USER`
            * :attr:`PolicyNat.NAT_TYPE_DEFAULT`
            * :attr:`PolicyNat.NAT_TYPE_NAT64`
            
             Represents a NAT section under tier-0/tier-1.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.nat_type = nat_type
        VapiStruct.__init__(self)


PolicyNat._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_nat', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'nat_type': type.OptionalType(type.StringType()),
    },
    PolicyNat,
    False,
    None))



class PolicyNatRule(VapiStruct):
    """
    Represents a NAT rule between source and destination at T0/T1 router.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    ACTION_SNAT = "SNAT"
    """


    """
    ACTION_DNAT = "DNAT"
    """


    """
    ACTION_REFLEXIVE = "REFLEXIVE"
    """


    """
    ACTION_NO_SNAT = "NO_SNAT"
    """


    """
    ACTION_NO_DNAT = "NO_DNAT"
    """


    """
    ACTION_NAT64 = "NAT64"
    """


    """
    FIREWALL_MATCH_MATCH_EXTERNAL_ADDRESS = "MATCH_EXTERNAL_ADDRESS"
    """


    """
    FIREWALL_MATCH_MATCH_INTERNAL_ADDRESS = "MATCH_INTERNAL_ADDRESS"
    """


    """
    FIREWALL_MATCH_BYPASS = "BYPASS"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'action': 'action',
                            'destination_network': 'destination_network',
                            'enabled': 'enabled',
                            'firewall_match': 'firewall_match',
                            'logging': 'logging',
                            'scope': 'scope',
                            'sequence_number': 'sequence_number',
                            'service': 'service',
                            'source_network': 'source_network',
                            'translated_network': 'translated_network',
                            'translated_ports': 'translated_ports',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 action=None,
                 destination_network=None,
                 enabled=None,
                 firewall_match=None,
                 logging=None,
                 scope=None,
                 sequence_number=None,
                 service=None,
                 source_network=None,
                 translated_network=None,
                 translated_ports=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  action: :class:`str` or ``None``
        :param action: Possible values are: 
            
            * :attr:`PolicyNatRule.ACTION_SNAT`
            * :attr:`PolicyNatRule.ACTION_DNAT`
            * :attr:`PolicyNatRule.ACTION_REFLEXIVE`
            * :attr:`PolicyNatRule.ACTION_NO_SNAT`
            * :attr:`PolicyNatRule.ACTION_NO_DNAT`
            * :attr:`PolicyNatRule.ACTION_NAT64`
            
            Source NAT(SNAT) - translates a source IP address in an outbound
            packet so that the packet appears to originate from a different
            network. SNAT is only supported when the logical router is running
            in active-standby mode. Destination NAT(DNAT) - translates the
            destination IP address of inbound packets so that packets are
            delivered to a target address into another network. DNAT is only
            supported when the logical router is running in active-standby
            mode. Reflexive NAT(REFLEXIVE) - IP-Range and CIDR are supported to
            define the \"n\". The number of original networks should be exactly
            the same as that of translated networks. The address translation is
            deterministic. Reflexive is supported on both Active/Standby and
            Active/Active LR. NO_SNAT and NO_DNAT - These do not have support
            for translated_fields, only source_network and destination_network
            fields are supported. NAT64 - translates an external IPv6 address
            to a internal IPv4 address.
        :type  destination_network: :class:`str` or ``None``
        :param destination_network: This supports single IP address or comma separated list of single
            IP addresses or CIDR. This does not support IP range or IP sets.
            For DNAT and NO_DNAT rules, this is a mandatory field, and
            represents the destination network for the incoming packets. For
            other type of rules, optionally it can contain destination network
            of outgoing packets. NULL value for this field represents ANY
            network. format: list-of-address-or-block-or-range
        :type  enabled: :class:`bool` or ``None``
        :param enabled: The flag, which suggests whether the NAT rule is enabled or
            disabled. The default is True.
        :type  firewall_match: :class:`str` or ``None``
        :param firewall_match: Possible values are: 
            
            * :attr:`PolicyNatRule.FIREWALL_MATCH_MATCH_EXTERNAL_ADDRESS`
            * :attr:`PolicyNatRule.FIREWALL_MATCH_MATCH_INTERNAL_ADDRESS`
            * :attr:`PolicyNatRule.FIREWALL_MATCH_BYPASS`
            
            It indicates how the firewall matches the address after NATing if
            firewall stage is not skipped. MATCH_EXTERNAL_ADDRESS indicates the
            firewall will be applied to external address of a NAT rule. For
            SNAT, the external address is the translated source address after
            NAT is done. For DNAT, the external address is the original
            destination address before NAT is done. For REFLEXIVE, to egress
            traffic, the firewall will be applied to the translated source
            address after NAT is done; To ingress traffic, the firewall will be
            applied to the original destination address before NAT is done.
            MATCH_INTERNAL_ADDRESS indicates the firewall will be applied to
            internal address of a NAT rule. For SNAT, the internal address is
            the original source address before NAT is done. For DNAT, the
            internal address is the translated destination address after NAT is
            done. For REFLEXIVE, to egress traffic, the firewall will be
            applied to the original source address before NAT is done; To
            ingress traffic, the firewall will be applied to the translated
            destination address after NAT is done. BYPASS indicates the
            firewall stage will be skipped. For NO_SNAT or NO_DNAT, it must be
            BYPASS or leave it unassigned
        :type  logging: :class:`bool` or ``None``
        :param logging: The flag, which suggests whether the logging of NAT rule is enabled
            or disabled. The default is False.
        :type  scope: :class:`list` of :class:`str` or ``None``
        :param scope: Represents the array of policy paths of ProviderInterface or
            NetworkInterface or labels of type ProviderInterface or
            NetworkInterface on which the NAT rule should get enforced. The
            interfaces must belong to the same router for which the NAT Rule is
            created.
        :type  sequence_number: :class:`long` or ``None``
        :param sequence_number: The sequence_number decides the rule_priority of a NAT rule.
            Sequence_number and rule_priority have 1:1 mapping.For each NAT
            section, there will be reserved rule_priority numbers.The valid
            range of rule_priority number is from 0 to 2147483647(MAX_INT). 1.
            INTERNAL section rule_priority reserved from 0 - 1023 (1024 rules)
            valid sequence_number range 0 - 1023 2. USER section rule_priority
            reserved from 1024 - 2147482623 (2147481600 rules) valid
            sequence_number range 0 - 2147481599 3. DEFAULT section
            rule_priority reserved from 2147482624 - 2147483647 (1024 rules)
            valid sequence_number range 0 - 1023 format: int32
        :type  service: :class:`str` or ``None``
        :param service: It represents the path of Service on which the NAT rule will be
            applied. If not provided or if it is blank then Policy manager will
            consider it as ANY. Please note, if this is a DNAT, the
            destination_port of the service will be realized on NSX Manager as
            the translated_port. And if this is a SNAT, the destination_port
            will be ignored.
        :type  source_network: :class:`str` or ``None``
        :param source_network: This supports single IP address or comma separated list of single
            IP addresses or CIDR. This does not support IP range or IP sets.
            For SNAT, NO_SNAT, NAT64 and REFLEXIVE rules, this is a mandatory
            field and represents the source network of the packets leaving the
            network. For DNAT and NO_DNAT rules, optionally it can contain
            source network of incoming packets. NULL value for this field
            represents ANY network. format: list-of-address-or-block-or-range
        :type  translated_network: :class:`str` or ``None``
        :param translated_network: This supports single IP address or comma separated list of single
            IP addresses or CIDR. This does not support IP range or IP sets.
            For SNAT, DNAT, NAT64 and REFLEXIVE rules, this ia a mandatory
            field, which represents the translated network address. For NO_SNAT
            and NO_DNAT this should be empty. format:
            list-of-address-or-block-or-range
        :type  translated_ports: :class:`str` or ``None``
        :param translated_ports: Please note, if there is service configured in this NAT rule, the
            translated_port will be realized on NSX Manager as the
            destination_port. If there is no sevice configured, the port will
            be ignored. format: port-or-range
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.action = action
        self.destination_network = destination_network
        self.enabled = enabled
        self.firewall_match = firewall_match
        self.logging = logging
        self.scope = scope
        self.sequence_number = sequence_number
        self.service = service
        self.source_network = source_network
        self.translated_network = translated_network
        self.translated_ports = translated_ports
        VapiStruct.__init__(self)


PolicyNatRule._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_nat_rule', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'action': type.OptionalType(type.StringType()),
        'destination_network': type.OptionalType(type.StringType()),
        'enabled': type.OptionalType(type.BooleanType()),
        'firewall_match': type.OptionalType(type.StringType()),
        'logging': type.OptionalType(type.BooleanType()),
        'scope': type.OptionalType(type.ListType(type.StringType())),
        'sequence_number': type.OptionalType(type.IntegerType()),
        'service': type.OptionalType(type.StringType()),
        'source_network': type.OptionalType(type.StringType()),
        'translated_network': type.OptionalType(type.StringType()),
        'translated_ports': type.OptionalType(type.StringType()),
    },
    PolicyNatRule,
    False,
    None))



class PolicyNatRuleListResult(VapiStruct):
    """
    Paged Collection of NAT Rules

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`PolicyNatRule` or ``None``
        :param results: NAT Rules list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


PolicyNatRuleListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_nat_rule_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyNatRule'))),
    },
    PolicyNatRuleListResult,
    False,
    None))



class PolicyNatRuleStatistics(VapiStruct):
    """
    Gives the Statistics of a NAT rule.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'active_sessions': 'active_sessions',
                            'total_bytes': 'total_bytes',
                            'total_packets': 'total_packets',
                            'last_update_timestamp': 'last_update_timestamp',
                            'warning_message': 'warning_message',
                            }

    def __init__(self,
                 active_sessions=None,
                 total_bytes=None,
                 total_packets=None,
                 last_update_timestamp=None,
                 warning_message=None,
                ):
        """
        :type  active_sessions: :class:`long` or ``None``
        :param active_sessions: Gives the total number of active sessions. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  total_bytes: :class:`long` or ``None``
        :param total_bytes: Gives the total number of bytes. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  total_packets: :class:`long` or ``None``
        :param total_packets: Gives the total number of packets. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_update_timestamp: :class:`long` or ``None``
        :param last_update_timestamp: Timestamp when the data was last updated. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  warning_message: :class:`str` or ``None``
        :param warning_message: The warning message about the NAT Rule Statistics.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.active_sessions = active_sessions
        self.total_bytes = total_bytes
        self.total_packets = total_packets
        self.last_update_timestamp = last_update_timestamp
        self.warning_message = warning_message
        VapiStruct.__init__(self)


PolicyNatRuleStatistics._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_nat_rule_statistics', {
        'active_sessions': type.OptionalType(type.IntegerType()),
        'total_bytes': type.OptionalType(type.IntegerType()),
        'total_packets': type.OptionalType(type.IntegerType()),
        'last_update_timestamp': type.OptionalType(type.IntegerType()),
        'warning_message': type.OptionalType(type.StringType()),
    },
    PolicyNatRuleStatistics,
    False,
    None))



class PolicyNatRuleStatisticsListResult(VapiStruct):
    """
    Gives the collection of NAT rule statistics per enforcement point.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`PolicyNatRuleStatisticsPerEnforcementPoint` or ``None``
        :param results: NAT rules statistics per enforcement point
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


PolicyNatRuleStatisticsListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_nat_rule_statistics_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyNatRuleStatisticsPerEnforcementPoint'))),
    },
    PolicyNatRuleStatisticsListResult,
    False,
    None))



class PolicyNatRuleStatisticsPerEnforcementPoint(VapiStruct):
    """
    Gives the statistics of a NAT rule per enforcement point.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'enforcement_point_path': 'enforcement_point_path',
                            'rule_path': 'rule_path',
                            'rule_statistics': 'rule_statistics',
                            }

    def __init__(self,
                 enforcement_point_path=None,
                 rule_path=None,
                 rule_statistics=None,
                ):
        """
        :type  enforcement_point_path: :class:`str` or ``None``
        :param enforcement_point_path: Policy Path referencing the enforcement point from where the
            statistics are fetched.
        :type  rule_path: :class:`str` or ``None``
        :param rule_path: Path of NAT Rule.
        :type  rule_statistics: :class:`list` of :class:`PolicyNatRuleStatistics` or ``None``
        :param rule_statistics: Gives NAT rule stats on an enforcement point.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.enforcement_point_path = enforcement_point_path
        self.rule_path = rule_path
        self.rule_statistics = rule_statistics
        VapiStruct.__init__(self)


PolicyNatRuleStatisticsPerEnforcementPoint._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_nat_rule_statistics_per_enforcement_point', {
        'enforcement_point_path': type.OptionalType(type.StringType()),
        'rule_path': type.OptionalType(type.StringType()),
        'rule_statistics': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyNatRuleStatistics'))),
    },
    PolicyNatRuleStatisticsPerEnforcementPoint,
    False,
    None))



class PolicyNatRuleStatisticsPerLogicalRouter(VapiStruct):
    """
    Gives the statistics of a NAT rule per logical router on specified
    enforcement point.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'enforcement_point_path': 'enforcement_point_path',
                            'last_update_timestamp': 'last_update_timestamp',
                            'per_node_statistics': 'per_node_statistics',
                            'router_path': 'router_path',
                            'statistics': 'statistics',
                            }

    def __init__(self,
                 enforcement_point_path=None,
                 last_update_timestamp=None,
                 per_node_statistics=None,
                 router_path=None,
                 statistics=None,
                ):
        """
        :type  enforcement_point_path: :class:`str` or ``None``
        :param enforcement_point_path: Policy Path referencing the enforcement point from where the
            statistics are fetched.
        :type  last_update_timestamp: :class:`long` or ``None``
        :param last_update_timestamp: Timestamp when the data was last updated. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  per_node_statistics: :class:`list` of :class:`PolicyNatRuleStatisticsPerTransportNode` or ``None``
        :param per_node_statistics: Detailed Rule statistics per logical router.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  router_path: :class:`str` or ``None``
        :param router_path: Path of the router.
        :type  statistics: :class:`PolicyNATRuleCounters` or ``None``
        :param statistics: Rolled up statistics for all rules on the logical router.
        """
        self.enforcement_point_path = enforcement_point_path
        self.last_update_timestamp = last_update_timestamp
        self.per_node_statistics = per_node_statistics
        self.router_path = router_path
        self.statistics = statistics
        VapiStruct.__init__(self)


PolicyNatRuleStatisticsPerLogicalRouter._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_nat_rule_statistics_per_logical_router', {
        'enforcement_point_path': type.OptionalType(type.StringType()),
        'last_update_timestamp': type.OptionalType(type.IntegerType()),
        'per_node_statistics': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyNatRuleStatisticsPerTransportNode'))),
        'router_path': type.OptionalType(type.StringType()),
        'statistics': type.OptionalType(type.ReferenceType(__name__, 'PolicyNATRuleCounters')),
    },
    PolicyNatRuleStatisticsPerLogicalRouter,
    False,
    None))



class PolicyNatRuleStatisticsPerLogicalRouterListResult(VapiStruct):
    """
    Gives the collection of NAT rule statistics per logical router on specified
    enforcement point.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`PolicyNatRuleStatisticsPerLogicalRouter` or ``None``
        :param results: NAT rules statistics per logical router
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


PolicyNatRuleStatisticsPerLogicalRouterListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_nat_rule_statistics_per_logical_router_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyNatRuleStatisticsPerLogicalRouter'))),
    },
    PolicyNatRuleStatisticsPerLogicalRouterListResult,
    False,
    None))



class PolicyNatRuleStatisticsPerTransportNode(VapiStruct):
    """
    Gives the Statistics of a NAT rule.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'active_sessions': 'active_sessions',
                            'total_bytes': 'total_bytes',
                            'total_packets': 'total_packets',
                            'last_update_timestamp': 'last_update_timestamp',
                            'transport_node_path': 'transport_node_path',
                            }

    def __init__(self,
                 active_sessions=None,
                 total_bytes=None,
                 total_packets=None,
                 last_update_timestamp=None,
                 transport_node_path=None,
                ):
        """
        :type  active_sessions: :class:`long` or ``None``
        :param active_sessions: Gives the total number of active sessions. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  total_bytes: :class:`long` or ``None``
        :param total_bytes: Gives the total number of bytes. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  total_packets: :class:`long` or ``None``
        :param total_packets: Gives the total number of packets. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_update_timestamp: :class:`long` or ``None``
        :param last_update_timestamp: Timestamp when the data was last updated. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  transport_node_path: :class:`str` or ``None``
        :param transport_node_path: Policy path of the Edge Node.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.active_sessions = active_sessions
        self.total_bytes = total_bytes
        self.total_packets = total_packets
        self.last_update_timestamp = last_update_timestamp
        self.transport_node_path = transport_node_path
        VapiStruct.__init__(self)


PolicyNatRuleStatisticsPerTransportNode._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_nat_rule_statistics_per_transport_node', {
        'active_sessions': type.OptionalType(type.IntegerType()),
        'total_bytes': type.OptionalType(type.IntegerType()),
        'total_packets': type.OptionalType(type.IntegerType()),
        'last_update_timestamp': type.OptionalType(type.IntegerType()),
        'transport_node_path': type.OptionalType(type.StringType()),
    },
    PolicyNatRuleStatisticsPerTransportNode,
    False,
    None))



class PolicyNonCompliantConfig(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'affected_resources': 'affected_resources',
                            'description': 'description',
                            'non_compliance_code': 'non_compliance_code',
                            'reported_by': 'reported_by',
                            }

    def __init__(self,
                 affected_resources=None,
                 description=None,
                 non_compliance_code=None,
                 reported_by=None,
                ):
        """
        :type  affected_resources: :class:`list` of :class:`PolicyResourceReference` or ``None``
        :param affected_resources: Resources/Services impacted by non compliant configuration
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Detail description of non compliant configuration with suggestive
            action
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  non_compliance_code: :class:`long` or ``None``
        :param non_compliance_code: Code for non compliant configuration format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  reported_by: :class:`PolicyResourceReference` or ``None``
        :param reported_by: Id and name of non compliant resource/service
        """
        self.affected_resources = affected_resources
        self.description = description
        self.non_compliance_code = non_compliance_code
        self.reported_by = reported_by
        VapiStruct.__init__(self)


PolicyNonCompliantConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_non_compliant_config', {
        'affected_resources': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyResourceReference'))),
        'description': type.OptionalType(type.StringType()),
        'non_compliance_code': type.OptionalType(type.IntegerType()),
        'reported_by': type.OptionalType(type.ReferenceType(__name__, 'PolicyResourceReference')),
    },
    PolicyNonCompliantConfig,
    False,
    None))



class PolicyPimProfile(VapiStruct):
    """
    PIM profile.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'rp_address': 'rp_address',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 rp_address=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  rp_address: :class:`str` or ``None``
        :param rp_address: Static IPv4 multicast address configuration. format: ip
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.rp_address = rp_address
        VapiStruct.__init__(self)


PolicyPimProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_pim_profile', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'rp_address': type.OptionalType(type.StringType()),
    },
    PolicyPimProfile,
    False,
    None))



class PolicyPimProfileListResult(VapiStruct):
    """
    Collection of Pim Profile.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`PolicyPimProfile` or ``None``
        :param results: PIM Profile list results.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


PolicyPimProfileListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_pim_profile_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyPimProfile'))),
    },
    PolicyPimProfileListResult,
    False,
    None))



class PolicyRealizedResource(VapiStruct):
    """
    Abstract base class for all the realized policy objects

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    STATE_UNAVAILABLE = "UNAVAILABLE"
    """


    """
    STATE_UNREALIZED = "UNREALIZED"
    """


    """
    STATE_REALIZED = "REALIZED"
    """


    """
    STATE_ERROR = "ERROR"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'alarms': 'alarms',
                            'intent_reference': 'intent_reference',
                            'realization_api': 'realization_api',
                            'realization_specific_identifier': 'realization_specific_identifier',
                            'runtime_error': 'runtime_error',
                            'runtime_status': 'runtime_status',
                            'state': 'state',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 alarms=None,
                 intent_reference=None,
                 realization_api=None,
                 realization_specific_identifier=None,
                 runtime_error=None,
                 runtime_status=None,
                 state=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  alarms: :class:`list` of :class:`PolicyAlarmResource` or ``None``
        :param alarms: Alarm info detail
        :type  intent_reference: :class:`list` of :class:`str` or ``None``
        :param intent_reference: Desire state paths of this object
        :type  realization_api: :class:`str` or ``None``
        :param realization_api: Realization API of this object on enforcement point
        :type  realization_specific_identifier: :class:`str` or ``None``
        :param realization_specific_identifier: Realization id of this object
        :type  runtime_error: :class:`str` or ``None``
        :param runtime_error: It define the root cause for runtime error.
        :type  runtime_status: :class:`str` or ``None``
        :param runtime_status: Possible values could be UP, DOWN, UNKNOWN, DEGRADED This list is
            not exhaustive.
        :type  state: :class:`str` or ``None``
        :param state: Possible values are: 
            
            * :attr:`PolicyRealizedResource.STATE_UNAVAILABLE`
            * :attr:`PolicyRealizedResource.STATE_UNREALIZED`
            * :attr:`PolicyRealizedResource.STATE_REALIZED`
            * :attr:`PolicyRealizedResource.STATE_ERROR`
            
             Realization state of this object
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.alarms = alarms
        self.intent_reference = intent_reference
        self.realization_api = realization_api
        self.realization_specific_identifier = realization_specific_identifier
        self.runtime_error = runtime_error
        self.runtime_status = runtime_status
        self.state = state
        VapiStruct.__init__(self)


PolicyRealizedResource._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_realized_resource', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'alarms': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyAlarmResource'))),
        'intent_reference': type.OptionalType(type.ListType(type.StringType())),
        'realization_api': type.OptionalType(type.StringType()),
        'realization_specific_identifier': type.OptionalType(type.StringType()),
        'runtime_error': type.OptionalType(type.StringType()),
        'runtime_status': type.OptionalType(type.StringType()),
        'state': type.OptionalType(type.StringType()),
    },
    PolicyRealizedResource,
    False,
    None))



class PolicyRelatedApiError(VapiStruct):
    """
    Detailed information about errors from API call to an enforcement point

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'details': 'details',
                            'error_code': 'error_code',
                            'error_data': 'error_data',
                            'error_message': 'error_message',
                            'module_name': 'module_name',
                            }

    def __init__(self,
                 details=None,
                 error_code=None,
                 error_data=None,
                 error_message=None,
                 module_name=None,
                ):
        """
        :type  details: :class:`str` or ``None``
        :param details: Further details about the error
        :type  error_code: :class:`long` or ``None``
        :param error_code: A numeric error code format: int64
        :type  error_data: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param error_data: Additional data about the error
        :type  error_message: :class:`str` or ``None``
        :param error_message: A description of the error
        :type  module_name: :class:`str` or ``None``
        :param module_name: The module name where the error occurred
        """
        self.details = details
        self.error_code = error_code
        self.error_data = error_data
        self.error_message = error_message
        self.module_name = module_name
        VapiStruct.__init__(self)


PolicyRelatedApiError._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_related_api_error', {
        'details': type.OptionalType(type.StringType()),
        'error_code': type.OptionalType(type.IntegerType()),
        'error_data': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct)),
        'error_message': type.OptionalType(type.StringType()),
        'module_name': type.OptionalType(type.StringType()),
    },
    PolicyRelatedApiError,
    False,
    None))



class PolicyResource(VapiStruct):
    """
    Abstract base class for all the policy objects.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        VapiStruct.__init__(self)


PolicyResource._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_resource', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
    },
    PolicyResource,
    False,
    None))



class PolicyResourceReference(VapiStruct):
    """
    Policy resource reference.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'is_valid': 'is_valid',
                            'target_display_name': 'target_display_name',
                            'target_id': 'target_id',
                            'target_type': 'target_type',
                            'path': 'path',
                            }

    def __init__(self,
                 is_valid=None,
                 target_display_name=None,
                 target_id=None,
                 target_type=None,
                 path=None,
                ):
        """
        :type  is_valid: :class:`bool` or ``None``
        :param is_valid: Will be set to false if the referenced NSX resource has been
            deleted.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  target_display_name: :class:`str` or ``None``
        :param target_display_name: Display name of the NSX resource.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  target_id: :class:`str` or ``None``
        :param target_id: Identifier of the NSX resource.
        :type  target_type: :class:`str` or ``None``
        :param target_type: Type of the NSX resource.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.is_valid = is_valid
        self.target_display_name = target_display_name
        self.target_id = target_id
        self.target_type = target_type
        self.path = path
        VapiStruct.__init__(self)


PolicyResourceReference._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_resource_reference', {
        'is_valid': type.OptionalType(type.BooleanType()),
        'target_display_name': type.OptionalType(type.StringType()),
        'target_id': type.OptionalType(type.StringType()),
        'target_type': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
    },
    PolicyResourceReference,
    False,
    None))



class PolicyResourceReferenceForEP(VapiStruct):
    """
    Policy resource reference for enforcement point

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'is_valid': 'is_valid',
                            'target_display_name': 'target_display_name',
                            'target_id': 'target_id',
                            'target_type': 'target_type',
                            'path': 'path',
                            }

    def __init__(self,
                 is_valid=None,
                 target_display_name=None,
                 target_id=None,
                 target_type=None,
                 path=None,
                ):
        """
        :type  is_valid: :class:`bool` or ``None``
        :param is_valid: Will be set to false if the referenced NSX resource has been
            deleted.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  target_display_name: :class:`str` or ``None``
        :param target_display_name: Display name of the NSX resource.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  target_id: :class:`str` or ``None``
        :param target_id: Identifier of the NSX resource.
        :type  target_type: :class:`str` or ``None``
        :param target_type: Type of the NSX resource.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.is_valid = is_valid
        self.target_display_name = target_display_name
        self.target_id = target_id
        self.target_type = target_type
        self.path = path
        VapiStruct.__init__(self)


PolicyResourceReferenceForEP._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_resource_reference_for_EP', {
        'is_valid': type.OptionalType(type.BooleanType()),
        'target_display_name': type.OptionalType(type.StringType()),
        'target_id': type.OptionalType(type.StringType()),
        'target_type': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
    },
    PolicyResourceReferenceForEP,
    False,
    None))



class PolicyResourceReferenceForEPListResult(VapiStruct):
    """
    Paginated collection of policy resource references for enforcement point

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`PolicyResourceReferenceForEP` or ``None``
        :param results: Paged Collection of policy resource references for enforcement
            point
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


PolicyResourceReferenceForEPListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_resource_reference_for_EP_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyResourceReferenceForEP'))),
    },
    PolicyResourceReferenceForEPListResult,
    False,
    None))



class PolicyResourceReferenceListResult(VapiStruct):
    """
    Paged Collection of PolicyResourceReference

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`PolicyResourceReference` or ``None``
        :param results: Policy resource references list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


PolicyResourceReferenceListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_resource_reference_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyResourceReference'))),
    },
    PolicyResourceReferenceListResult,
    False,
    None))



class PolicyRuntimeAlarm(VapiStruct):
    """
    Alarm associated with the PolicyRuntimeInfoPerEP that exposes potential
    errors when retrieving runtime information from the enforcement point.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'error_details': 'error_details',
                            'error_id': 'error_id',
                            'message': 'message',
                            }

    def __init__(self,
                 error_details=None,
                 error_id=None,
                 message=None,
                ):
        """
        :type  error_details: :class:`PolicyApiError` or ``None``
        :param error_details: Detailed information about errors from an API call made to the
            enforcement point, if any.
        :type  error_id: :class:`str` or ``None``
        :param error_id: Alarm error id.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  message: :class:`str` or ``None``
        :param message: Error message describing the issue.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.error_details = error_details
        self.error_id = error_id
        self.message = message
        VapiStruct.__init__(self)


PolicyRuntimeAlarm._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_runtime_alarm', {
        'error_details': type.OptionalType(type.ReferenceType(__name__, 'PolicyApiError')),
        'error_id': type.OptionalType(type.StringType()),
        'message': type.OptionalType(type.StringType()),
    },
    PolicyRuntimeAlarm,
    False,
    None))



class PolicyRuntimeInfoPerEP(VapiStruct):
    """
    Runtime Info Per Enforcement Point.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'alarm': 'alarm',
                            'enforcement_point_path': 'enforcement_point_path',
                            }

    def __init__(self,
                 alarm=None,
                 enforcement_point_path=None,
                ):
        """
        :type  alarm: :class:`PolicyRuntimeAlarm` or ``None``
        :param alarm: Alarm information details.
        :type  enforcement_point_path: :class:`str` or ``None``
        :param enforcement_point_path: Policy Path referencing the enforcement point where the info is
            fetched.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.alarm = alarm
        self.enforcement_point_path = enforcement_point_path
        VapiStruct.__init__(self)


PolicyRuntimeInfoPerEP._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_runtime_info_per_EP', {
        'alarm': type.OptionalType(type.ReferenceType(__name__, 'PolicyRuntimeAlarm')),
        'enforcement_point_path': type.OptionalType(type.StringType()),
    },
    PolicyRuntimeInfoPerEP,
    False,
    None))



class PolicyServiceChain(VapiStruct):
    """
    Service chain is a set of network Services. A Service chain is made up of
    ordered list of service profiles belonging to any same or different
    services.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    FAILURE_POLICY_ALLOW = "ALLOW"
    """


    """
    FAILURE_POLICY_BLOCK = "BLOCK"
    """


    """
    PATH_SELECTION_POLICY_ANY = "ANY"
    """


    """
    PATH_SELECTION_POLICY_LOCAL = "LOCAL"
    """


    """
    PATH_SELECTION_POLICY_REMOTE = "REMOTE"
    """


    """
    PATH_SELECTION_POLICY_ROUND_ROBIN = "ROUND_ROBIN"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'failure_policy': 'failure_policy',
                            'forward_path_service_profiles': 'forward_path_service_profiles',
                            'path_selection_policy': 'path_selection_policy',
                            'reverse_path_service_profiles': 'reverse_path_service_profiles',
                            'service_segment_path': 'service_segment_path',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 failure_policy=None,
                 forward_path_service_profiles=None,
                 path_selection_policy=None,
                 reverse_path_service_profiles=None,
                 service_segment_path=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  failure_policy: :class:`str` or ``None``
        :param failure_policy: Possible values are: 
            
            * :attr:`PolicyServiceChain.FAILURE_POLICY_ALLOW`
            * :attr:`PolicyServiceChain.FAILURE_POLICY_BLOCK`
            
            Failure policy for the service defines the action to be taken i.e
            to allow or to block the traffic during failure scenarios.
        :type  forward_path_service_profiles: :class:`list` of :class:`str` or ``None``
        :param forward_path_service_profiles: Forward path service profiles are applied to ingress traffic.
        :type  path_selection_policy: :class:`str` or ``None``
        :param path_selection_policy: Possible values are: 
            
            * :attr:`PolicyServiceChain.PATH_SELECTION_POLICY_ANY`
            * :attr:`PolicyServiceChain.PATH_SELECTION_POLICY_LOCAL`
            * :attr:`PolicyServiceChain.PATH_SELECTION_POLICY_REMOTE`
            * :attr:`PolicyServiceChain.PATH_SELECTION_POLICY_ROUND_ROBIN`
            
            Path selection policy can be - ANY - Service Insertion is free to
            redirect to any service path regardless of any load balancing
            considerations or flow pinning. LOCAL - Preference to be given to
            local service insances. REMOTE - Preference to be given to the SVM
            co-located on the same host. ROUND_ROBIN - All active service paths
            are hit with equal probability.
        :type  reverse_path_service_profiles: :class:`list` of :class:`str` or ``None``
        :param reverse_path_service_profiles: Reverse path service profiles are applied to egress traffic and is
            optional. 2 different set of profiles can be defined for forward
            and reverse path. If not defined, the reverse of the forward path
            service profile is applied.
        :type  service_segment_path: :class:`list` of :class:`str` or ``None``
        :param service_segment_path: Path to service segment using which the traffic needs to be
            redirected.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.failure_policy = failure_policy
        self.forward_path_service_profiles = forward_path_service_profiles
        self.path_selection_policy = path_selection_policy
        self.reverse_path_service_profiles = reverse_path_service_profiles
        self.service_segment_path = service_segment_path
        VapiStruct.__init__(self)


PolicyServiceChain._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_service_chain', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'failure_policy': type.OptionalType(type.StringType()),
        'forward_path_service_profiles': type.OptionalType(type.ListType(type.StringType())),
        'path_selection_policy': type.OptionalType(type.StringType()),
        'reverse_path_service_profiles': type.OptionalType(type.ListType(type.StringType())),
        'service_segment_path': type.OptionalType(type.ListType(type.StringType())),
    },
    PolicyServiceChain,
    False,
    None))



class PolicyServiceChainListResult(VapiStruct):
    """
    Policy Service Chain List

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`PolicyServiceChain` or ``None``
        :param results: All PolicyServiceChain objects
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


PolicyServiceChainListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_service_chain_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyServiceChain'))),
    },
    PolicyServiceChainListResult,
    False,
    None))



class PolicyServiceInstance(VapiStruct):
    """
    Represents an instance of partner Service and its configuration.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    DEPLOYMENT_MODE_STAND_ALONE = "STAND_ALONE"
    """


    """
    DEPLOYMENT_MODE_ACTIVE_STANDBY = "ACTIVE_STANDBY"
    """


    """
    TRANSPORT_TYPE_L2_BRIDGE = "L2_BRIDGE"
    """


    """
    TRANSPORT_TYPE_L3_ROUTED = "L3_ROUTED"
    """


    """
    FAILURE_POLICY_ALLOW = "ALLOW"
    """


    """
    FAILURE_POLICY_BLOCK = "BLOCK"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'deployment_mode': 'deployment_mode',
                            'partner_service_name': 'partner_service_name',
                            'transport_type': 'transport_type',
                            'attributes': 'attributes',
                            'compute_id': 'compute_id',
                            'context_id': 'context_id',
                            'deployment_spec_name': 'deployment_spec_name',
                            'deployment_template_name': 'deployment_template_name',
                            'failure_policy': 'failure_policy',
                            'primary_gateway_address': 'primary_gateway_address',
                            'primary_interface_mgmt_ip': 'primary_interface_mgmt_ip',
                            'primary_interface_network': 'primary_interface_network',
                            'primary_portgroup_id': 'primary_portgroup_id',
                            'primary_subnet_mask': 'primary_subnet_mask',
                            'secondary_gateway_address': 'secondary_gateway_address',
                            'secondary_interface_mgmt_ip': 'secondary_interface_mgmt_ip',
                            'secondary_interface_network': 'secondary_interface_network',
                            'secondary_portgroup_id': 'secondary_portgroup_id',
                            'secondary_subnet_mask': 'secondary_subnet_mask',
                            'storage_id': 'storage_id',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 deployment_mode=None,
                 partner_service_name=None,
                 transport_type=None,
                 attributes=None,
                 compute_id=None,
                 context_id=None,
                 deployment_spec_name=None,
                 deployment_template_name=None,
                 failure_policy=None,
                 primary_gateway_address=None,
                 primary_interface_mgmt_ip=None,
                 primary_interface_network=None,
                 primary_portgroup_id=None,
                 primary_subnet_mask=None,
                 secondary_gateway_address=None,
                 secondary_interface_mgmt_ip=None,
                 secondary_interface_network=None,
                 secondary_portgroup_id=None,
                 secondary_subnet_mask=None,
                 storage_id=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  deployment_mode: :class:`str` or ``None``
        :param deployment_mode: Possible values are: 
            
            * :attr:`PolicyServiceInstance.DEPLOYMENT_MODE_STAND_ALONE`
            * :attr:`PolicyServiceInstance.DEPLOYMENT_MODE_ACTIVE_STANDBY`
            
            Deployment mode specifies how the partner appliance will be
            deployed i.e. in HA or standalone mode.
        :type  partner_service_name: :class:`str` or ``None``
        :param partner_service_name: Unique name of Partner Service in the Marketplace
        :type  transport_type: :class:`str` or ``None``
        :param transport_type: Possible values are: 
            
            * :attr:`PolicyServiceInstance.TRANSPORT_TYPE_L2_BRIDGE`
            * :attr:`PolicyServiceInstance.TRANSPORT_TYPE_L3_ROUTED`
            
             Transport to be used while deploying Service-VM.
        :type  attributes: :class:`list` of :class:`Attribute` or ``None``
        :param attributes: List of attributes specific to a partner for which the service is
            created. There attributes are passed on to the partner appliance.
        :type  compute_id: :class:`str` or ``None``
        :param compute_id: Id of the compute(ResourcePool) to which this service needs to be
            deployed.
        :type  context_id: :class:`str` or ``None``
        :param context_id: UUID of VCenter/Compute Manager as seen on NSX Manager, to which
            this service needs to be deployed.
        :type  deployment_spec_name: :class:`str` or ``None``
        :param deployment_spec_name: Form factor for the deployment of partner service.
        :type  deployment_template_name: :class:`str` or ``None``
        :param deployment_template_name: Template for the deployment of partnet service.
        :type  failure_policy: :class:`str` or ``None``
        :param failure_policy: Possible values are: 
            
            * :attr:`PolicyServiceInstance.FAILURE_POLICY_ALLOW`
            * :attr:`PolicyServiceInstance.FAILURE_POLICY_BLOCK`
            
            Failure policy for the Service VM. If this values is not provided,
            it will be defaulted to FAIL_CLOSE.
        :type  primary_gateway_address: :class:`str` or ``None``
        :param primary_gateway_address: Gateway address for primary management console. If the provided
            segment already has gateway, this field can be omitted. But if it
            is provided, it takes precedence always. However, if provided
            segment does not have gateway, this field must be provided. format:
            address-or-block-or-range
        :type  primary_interface_mgmt_ip: :class:`str` or ``None``
        :param primary_interface_mgmt_ip: Management IP Address of primary interface of the Service format:
            address-or-block-or-range
        :type  primary_interface_network: :class:`str` or ``None``
        :param primary_interface_network: Path of the segment to which primary interface of the Service VM
            needs to be connected
        :type  primary_portgroup_id: :class:`str` or ``None``
        :param primary_portgroup_id: Id of the standard or ditsributed port group for primary management
            console. Please note that only 1 of the 2 values from 1.
            primary_interface_network 2. primary_portgroup_id are allowed to be
            passed. Both can't be passed in the same request.
        :type  primary_subnet_mask: :class:`str` or ``None``
        :param primary_subnet_mask: Subnet for primary management console IP. If the provided segment
            already has subnet, this field can be omitted. But if it is
            provided, it takes precedence always. However, if provided segment
            does not have subnet, this field must be provided. format:
            address-or-block-or-range
        :type  secondary_gateway_address: :class:`str` or ``None``
        :param secondary_gateway_address: Gateway address for secondary management console. If the provided
            segment already has gateway, this field can be omitted. But if it
            is provided, it takes precedence always. However, if provided
            segment does not have gateway, this field must be provided. format:
            address-or-block-or-range
        :type  secondary_interface_mgmt_ip: :class:`str` or ``None``
        :param secondary_interface_mgmt_ip: Management IP Address of secondary interface of the Service format:
            address-or-block-or-range
        :type  secondary_interface_network: :class:`str` or ``None``
        :param secondary_interface_network: Path of segment to which secondary interface of the Service VM
            needs to be connected
        :type  secondary_portgroup_id: :class:`str` or ``None``
        :param secondary_portgroup_id: Id of the standard or ditsributed port group for secondary
            management console. Please note that only 1 of the 2 values from 1.
            secondary_interface_network 2. secondary_portgroup_id are allowed
            to be passed. Both can't be passed in the same request.
        :type  secondary_subnet_mask: :class:`str` or ``None``
        :param secondary_subnet_mask: Subnet for secondary management console IP. If the provided segment
            already has subnet, this field can be omitted. But if it is
            provided, it takes precedence always. However, if provided segment
            does not have subnet, this field must be provided. format:
            address-or-block-or-range
        :type  storage_id: :class:`str` or ``None``
        :param storage_id: Id of the storage(Datastore). VC moref of Datastore to which this
            service needs to be deployed.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.deployment_mode = deployment_mode
        self.partner_service_name = partner_service_name
        self.transport_type = transport_type
        self.attributes = attributes
        self.compute_id = compute_id
        self.context_id = context_id
        self.deployment_spec_name = deployment_spec_name
        self.deployment_template_name = deployment_template_name
        self.failure_policy = failure_policy
        self.primary_gateway_address = primary_gateway_address
        self.primary_interface_mgmt_ip = primary_interface_mgmt_ip
        self.primary_interface_network = primary_interface_network
        self.primary_portgroup_id = primary_portgroup_id
        self.primary_subnet_mask = primary_subnet_mask
        self.secondary_gateway_address = secondary_gateway_address
        self.secondary_interface_mgmt_ip = secondary_interface_mgmt_ip
        self.secondary_interface_network = secondary_interface_network
        self.secondary_portgroup_id = secondary_portgroup_id
        self.secondary_subnet_mask = secondary_subnet_mask
        self.storage_id = storage_id
        VapiStruct.__init__(self)


PolicyServiceInstance._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_service_instance', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'deployment_mode': type.OptionalType(type.StringType()),
        'partner_service_name': type.OptionalType(type.StringType()),
        'transport_type': type.OptionalType(type.StringType()),
        'attributes': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Attribute'))),
        'compute_id': type.OptionalType(type.StringType()),
        'context_id': type.OptionalType(type.StringType()),
        'deployment_spec_name': type.OptionalType(type.StringType()),
        'deployment_template_name': type.OptionalType(type.StringType()),
        'failure_policy': type.OptionalType(type.StringType()),
        'primary_gateway_address': type.OptionalType(type.StringType()),
        'primary_interface_mgmt_ip': type.OptionalType(type.StringType()),
        'primary_interface_network': type.OptionalType(type.StringType()),
        'primary_portgroup_id': type.OptionalType(type.StringType()),
        'primary_subnet_mask': type.OptionalType(type.StringType()),
        'secondary_gateway_address': type.OptionalType(type.StringType()),
        'secondary_interface_mgmt_ip': type.OptionalType(type.StringType()),
        'secondary_interface_network': type.OptionalType(type.StringType()),
        'secondary_portgroup_id': type.OptionalType(type.StringType()),
        'secondary_subnet_mask': type.OptionalType(type.StringType()),
        'storage_id': type.OptionalType(type.StringType()),
    },
    PolicyServiceInstance,
    False,
    None))



class PolicyServiceInstanceListResult(VapiStruct):
    """
    Collection of only SI objects

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`PolicyServiceInstance` or ``None``
        :param results: Service instance list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


PolicyServiceInstanceListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_service_instance_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyServiceInstance'))),
    },
    PolicyServiceInstanceListResult,
    False,
    None))



class PolicyServiceInstanceStatistics(VapiStruct):
    """
    Statistics for NICs for a PolicyServiceInstance

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'enforcement_point_path': 'enforcement_point_path',
                            'instance_runtime_statistics': 'instance_runtime_statistics',
                            'service_instance_id': 'service_instance_id',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 enforcement_point_path=None,
                 instance_runtime_statistics=None,
                 service_instance_id=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  enforcement_point_path: :class:`str` or ``None``
        :param enforcement_point_path: Enforcement point path, forward slashes must be escaped using %2F.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  instance_runtime_statistics: :class:`list` of :class:`InstanceRuntimeStatistic` or ``None``
        :param instance_runtime_statistics: Statistics for the data NICs for all the runtimes associated with
            this service instance.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  service_instance_id: :class:`str` or ``None``
        :param service_instance_id: PolicyServiceInsatnce path
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.enforcement_point_path = enforcement_point_path
        self.instance_runtime_statistics = instance_runtime_statistics
        self.service_instance_id = service_instance_id
        VapiStruct.__init__(self)


PolicyServiceInstanceStatistics._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_service_instance_statistics', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'enforcement_point_path': type.OptionalType(type.StringType()),
        'instance_runtime_statistics': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'InstanceRuntimeStatistic'))),
        'service_instance_id': type.OptionalType(type.StringType()),
    },
    PolicyServiceInstanceStatistics,
    False,
    None))



class PolicyServiceProfile(VapiStruct):
    """
    Service profile represents specialization of a vendor template. User may
    provide any of the vendor_template_name or vendor_template_key properties.
    But in case of multiple vendor templates with the same name, it is
    recommended to use the vendor_template_key. When both attributes are
    provided, name is ignored and only key is used to identify the template. If
    there are multiple templates with same name, and vendor_template_name is
    provided, realization will fail.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    REDIRECTION_ACTION_PUNT = "PUNT"
    """


    """
    REDIRECTION_ACTION_COPY = "COPY"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'attributes': 'attributes',
                            'redirection_action': 'redirection_action',
                            'vendor_template_key': 'vendor_template_key',
                            'vendor_template_name': 'vendor_template_name',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 attributes=None,
                 redirection_action=None,
                 vendor_template_key=None,
                 vendor_template_name=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  attributes: :class:`list` of :class:`Attribute` or ``None``
        :param attributes: List of attributes specific to a partner for which the service is
            created. These attributes are passed on to the partner appliance
            and are opaque to NSX. If a vendor template exposes configurable
            parameters, then their values are specified here.
        :type  redirection_action: :class:`str` or ``None``
        :param redirection_action: Possible values are: 
            
            * :attr:`PolicyServiceProfile.REDIRECTION_ACTION_PUNT`
            * :attr:`PolicyServiceProfile.REDIRECTION_ACTION_COPY`
            
            The redirection action represents if the packet is exclusively
            redirected to the service, or if a copy is forwarded to the
            service. Redirection action is not applicable to guest
            introspection service.
        :type  vendor_template_key: :class:`str` or ``None``
        :param vendor_template_key: The vendor template key property of actual vendor template. This
            should be used when multiple templates with same name exist.
        :type  vendor_template_name: :class:`str` or ``None``
        :param vendor_template_name: Name of the vendor template for which this Service Profile is being
            created.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.attributes = attributes
        self.redirection_action = redirection_action
        self.vendor_template_key = vendor_template_key
        self.vendor_template_name = vendor_template_name
        VapiStruct.__init__(self)


PolicyServiceProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_service_profile', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'attributes': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Attribute'))),
        'redirection_action': type.OptionalType(type.StringType()),
        'vendor_template_key': type.OptionalType(type.StringType()),
        'vendor_template_name': type.OptionalType(type.StringType()),
    },
    PolicyServiceProfile,
    False,
    None))



class PolicyServiceProfileListResult(VapiStruct):
    """
    Policy Service Profile List

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`PolicyServiceProfile` or ``None``
        :param results: Service Profile list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


PolicyServiceProfileListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_service_profile_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyServiceProfile'))),
    },
    PolicyServiceProfileListResult,
    False,
    None))



class PolicySubAttributes(VapiStruct):
    """
    Policy Sub Attributes data holder

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    DATATYPE_STRING = "STRING"
    """


    """
    KEY_TLS_CIPHER_SUITE = "TLS_CIPHER_SUITE"
    """


    """
    KEY_TLS_VERSION = "TLS_VERSION"
    """


    """
    KEY_CIFS_SMB_VERSION = "CIFS_SMB_VERSION"
    """


    """



    _canonical_to_pep_names = {
                            'datatype': 'datatype',
                            'key': 'key',
                            'value': 'value',
                            }

    def __init__(self,
                 datatype=None,
                 key=None,
                 value=None,
                ):
        """
        :type  datatype: :class:`str` or ``None``
        :param datatype: Possible values are: 
            
            * :attr:`PolicySubAttributes.DATATYPE_STRING`
            
             Datatype for sub attribute
        :type  key: :class:`str` or ``None``
        :param key: Possible values are: 
            
            * :attr:`PolicySubAttributes.KEY_TLS_CIPHER_SUITE`
            * :attr:`PolicySubAttributes.KEY_TLS_VERSION`
            * :attr:`PolicySubAttributes.KEY_CIFS_SMB_VERSION`
            
             Key for sub attribute
        :type  value: :class:`list` of :class:`str` or ``None``
        :param value: Multiple sub attribute values can be specified as elements of
            array.
        """
        self.datatype = datatype
        self.key = key
        self.value = value
        VapiStruct.__init__(self)


PolicySubAttributes._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_sub_attributes', {
        'datatype': type.OptionalType(type.StringType()),
        'key': type.OptionalType(type.StringType()),
        'value': type.OptionalType(type.ListType(type.StringType())),
    },
    PolicySubAttributes,
    False,
    None))



class PolicyTimeIntervalValue(VapiStruct):
    """
    Time interval on which firewall schedule will be applicable

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'end_interval': 'end_interval',
                            'start_interval': 'start_interval',
                            }

    def __init__(self,
                 end_interval=None,
                 start_interval=None,
                ):
        """
        :type  end_interval: :class:`str` or ``None``
        :param end_interval: Time in 24 hour and minutes in multiple of 30. Example, 17:30.
        :type  start_interval: :class:`str` or ``None``
        :param start_interval: Time in 24 hour and minutes in multiple of 30. Example, 9:00.
        """
        self.end_interval = end_interval
        self.start_interval = start_interval
        VapiStruct.__init__(self)


PolicyTimeIntervalValue._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_time_interval_value', {
        'end_interval': type.OptionalType(type.StringType()),
        'start_interval': type.OptionalType(type.StringType()),
    },
    PolicyTimeIntervalValue,
    False,
    None))



class PolicyTraceflowObservationDropped(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'acl_rule_path': 'acl_rule_path',
                            'nat_rule_path': 'nat_rule_path',
                            'acl_rule_id': 'acl_rule_id',
                            'arp_fail_reason': 'arp_fail_reason',
                            'lport_id': 'lport_id',
                            'lport_name': 'lport_name',
                            'nat_rule_id': 'nat_rule_id',
                            'reason': 'reason',
                            'component_name': 'component_name',
                            'component_sub_type': 'component_sub_type',
                            'component_type': 'component_type',
                            'resource_type': 'resource_type',
                            'sequence_no': 'sequence_no',
                            'timestamp': 'timestamp',
                            'timestamp_micro': 'timestamp_micro',
                            'transport_node_id': 'transport_node_id',
                            'transport_node_name': 'transport_node_name',
                            'transport_node_type': 'transport_node_type',
                            }

    def __init__(self,
                 acl_rule_path=None,
                 nat_rule_path=None,
                 acl_rule_id=None,
                 arp_fail_reason=None,
                 lport_id=None,
                 lport_name=None,
                 nat_rule_id=None,
                 reason=None,
                 component_name=None,
                 component_sub_type=None,
                 component_type=None,
                 resource_type=None,
                 sequence_no=None,
                 timestamp=None,
                 timestamp_micro=None,
                 transport_node_id=None,
                 transport_node_name=None,
                 transport_node_type=None,
                ):
        """
        :type  acl_rule_path: :class:`str` or ``None``
        :param acl_rule_path: The path of the ACL rule that was applied to forward the traceflow
            packet
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  nat_rule_path: :class:`str` or ``None``
        :param nat_rule_path: The path of the NAT rule that was applied to forward the traceflow
            packet
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  acl_rule_id: :class:`long` or ``None``
        :param acl_rule_id: The id of the acl rule that was applied to drop the traceflow
            packet format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  arp_fail_reason: :class:`str` or ``None``
        :param arp_fail_reason: Possible values are: 
            
            * :attr:`TraceflowObservationDropped.ARP_FAIL_REASON_UNKNOWN`
            * :attr:`TraceflowObservationDropped.ARP_FAIL_REASON_TIMEOUT`
            * :attr:`TraceflowObservationDropped.ARP_FAIL_REASON_CPFAIL`
            * :attr:`TraceflowObservationDropped.ARP_FAIL_REASON_FROMCP`
            * :attr:`TraceflowObservationDropped.ARP_FAIL_REASON_PORTDESTROY`
            * :attr:`TraceflowObservationDropped.ARP_FAIL_REASON_TABLEDESTROY`
            * :attr:`TraceflowObservationDropped.ARP_FAIL_REASON_NETDESTROY`
            
            This field specifies the ARP fails reason ARP_TIMEOUT - ARP failure
            due to query control plane timeout ARP_CPFAIL - ARP failure due
            post ARP query message to control plane failure ARP_FROMCP - ARP
            failure due to deleting ARP entry from control plane
            ARP_PORTDESTROY - ARP failure due to port destruction
            ARP_TABLEDESTROY - ARP failure due to ARP table destruction
            ARP_NETDESTROY - ARP failure due to overlay network destruction
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  lport_id: :class:`str` or ``None``
        :param lport_id: The id of the logical port at which the traceflow packet was
            dropped
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  lport_name: :class:`str` or ``None``
        :param lport_name: The name of the logical port at which the traceflow packet was
            dropped
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  nat_rule_id: :class:`long` or ``None``
        :param nat_rule_id: The ID of the NAT rule that was applied to forward the traceflow
            packet format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  reason: :class:`str` or ``None``
        :param reason: Possible values are: 
            
            * :attr:`TraceflowObservationDropped.REASON_ARP_FAIL`
            * :attr:`TraceflowObservationDropped.REASON_BFD`
            * :attr:`TraceflowObservationDropped.REASON_DHCP`
            * :attr:`TraceflowObservationDropped.REASON_FW_RULE`
            * :attr:`TraceflowObservationDropped.REASON_GENEVE`
            * :attr:`TraceflowObservationDropped.REASON_GRE`
            * :attr:`TraceflowObservationDropped.REASON_IFACE`
            * :attr:`TraceflowObservationDropped.REASON_IP`
            * :attr:`TraceflowObservationDropped.REASON_IP_REASS`
            * :attr:`TraceflowObservationDropped.REASON_IPSEC`
            * :attr:`TraceflowObservationDropped.REASON_IPSEC_VTI`
            * :attr:`TraceflowObservationDropped.REASON_L2VPN`
            * :attr:`TraceflowObservationDropped.REASON_L4PORT`
            * :attr:`TraceflowObservationDropped.REASON_LB`
            * :attr:`TraceflowObservationDropped.REASON_LROUTER`
            * :attr:`TraceflowObservationDropped.REASON_LSERVICE`
            * :attr:`TraceflowObservationDropped.REASON_LSWITCH`
            * :attr:`TraceflowObservationDropped.REASON_MD_PROXY`
            * :attr:`TraceflowObservationDropped.REASON_NAT`
            * :attr:`TraceflowObservationDropped.REASON_ND_NS_FAIL`
            * :attr:`TraceflowObservationDropped.REASON_NEIGH`
            * :attr:`TraceflowObservationDropped.REASON_NO_EIP_FOUND`
            * :attr:`TraceflowObservationDropped.REASON_NO_EIP_ASSOCIATION`
            * :attr:`TraceflowObservationDropped.REASON_NO_ENI_FOR_IP`
            * :attr:`TraceflowObservationDropped.REASON_NO_ENI_FOR_LIF`
            * :attr:`TraceflowObservationDropped.REASON_NO_ROUTE`
            * :attr:`TraceflowObservationDropped.REASON_NO_ROUTE_TABLE_FOUND`
            *
              :attr:`TraceflowObservationDropped.REASON_NO_UNDERLAY_ROUTE_FOUND`
            * :attr:`TraceflowObservationDropped.REASON_NOT_VDR_DOWNLINK_`
            * :attr:`TraceflowObservationDropped.REASON_NO_VDR_FOUND`
            * :attr:`TraceflowObservationDropped.REASON_NO_VDR_ON_HOST`
            * :attr:`TraceflowObservationDropped.REASON_NOT_VDR_UPLINK_`
            * :attr:`TraceflowObservationDropped.REASON_SERVICE_INSERT`
            * :attr:`TraceflowObservationDropped.REASON_SPOOFGUARD`
            * :attr:`TraceflowObservationDropped.REASON_TTL_ZERO`
            * :attr:`TraceflowObservationDropped.REASON_TUNNEL`
            * :attr:`TraceflowObservationDropped.REASON_VXLAN`
            * :attr:`TraceflowObservationDropped.REASON_VXSTT`
            * :attr:`TraceflowObservationDropped.REASON_VMC_NO_RESPONSE`
            * :attr:`TraceflowObservationDropped.REASON_WRONG_UPLINK`
            * :attr:`TraceflowObservationDropped.REASON_UNKNOWN`
            
             The reason traceflow packet was dropped
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  component_name: :class:`str` or ``None``
        :param component_name: The name of the component that issued the observation.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  component_sub_type: :class:`str` or ``None``
        :param component_sub_type: Possible values are: 
            
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_LR_TIER0`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_LR_TIER1`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_LR_VRF_TIER0`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_LS_TRANSIT`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_SI_CLASSIFIER`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_SI_PROXY`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_VDR`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_ENI`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_AWS_GATEWAY`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_TGW_ROUTE`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_EDGE_UPLINK`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_DELL_GATEWAY`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_UNKNOWN`
            
             The sub type of the component that issued the observation.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  component_type: :class:`str` or ``None``
        :param component_type: Possible values are: 
            
            * :attr:`TraceflowObservation.COMPONENT_TYPE_PHYSICAL`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_LR`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_LS`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_DFW`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_BRIDGE`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_EDGE_TUNNEL`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_EDGE_HOSTSWITCH`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_FW_BRIDGE`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_LOAD_BALANCER`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_NAT`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_IPSEC`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_SERVICE_INSERTION`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_VMC`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_SPOOFGUARD`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_EDGE_FW`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_UNKNOWN`
            
             The type of the component that issued the observation.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONFORWARDED`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONDROPPED`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONDELIVERED`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONRECEIVED`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONFORWARDEDLOGICAL`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONDROPPEDLOGICAL`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONRECEIVEDLOGICAL`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONREPLICATIONLOGICAL`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONRELAYEDLOGICAL`
        :type  sequence_no: :class:`long` or ``None``
        :param sequence_no: the hop count for observations on the transport node that a
            traceflow packet is injected in will be 0. The hop count is
            incremented each time a subsequent transport node receives the
            traceflow packet. The sequence number of 999 indicates that the hop
            count could not be determined for the containing observation.
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  timestamp: :class:`long` or ``None``
        :param timestamp: Timestamp when the observation was created by the transport node
            (milliseconds epoch) format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  timestamp_micro: :class:`long` or ``None``
        :param timestamp_micro: Timestamp when the observation was created by the transport node
            (microseconds epoch) format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  transport_node_id: :class:`str` or ``None``
        :param transport_node_id: id of the transport node that observed a traceflow packet
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  transport_node_name: :class:`str` or ``None``
        :param transport_node_name: name of the transport node that observed a traceflow packet
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  transport_node_type: :class:`str` or ``None``
        :param transport_node_type: Possible values are: 
            
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_ESX`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_RHELKVM`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_UBUNTUKVM`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_EDGE`
            *
              :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_PUBLIC_CLOUD_GATEWAY_NODE`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_OTHERS`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_HYPERV`
            
             type of the transport node that observed a traceflow packet
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.acl_rule_path = acl_rule_path
        self.nat_rule_path = nat_rule_path
        self.acl_rule_id = acl_rule_id
        self.arp_fail_reason = arp_fail_reason
        self.lport_id = lport_id
        self.lport_name = lport_name
        self.nat_rule_id = nat_rule_id
        self.reason = reason
        self.component_name = component_name
        self.component_sub_type = component_sub_type
        self.component_type = component_type
        self._resource_type = resource_type
        self.sequence_no = sequence_no
        self.timestamp = timestamp
        self.timestamp_micro = timestamp_micro
        self.transport_node_id = transport_node_id
        self.transport_node_name = transport_node_name
        self.transport_node_type = transport_node_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

PolicyTraceflowObservationDropped._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_traceflow_observation_dropped', {
        'acl_rule_path': type.OptionalType(type.StringType()),
        'nat_rule_path': type.OptionalType(type.StringType()),
        'acl_rule_id': type.OptionalType(type.IntegerType()),
        'arp_fail_reason': type.OptionalType(type.StringType()),
        'lport_id': type.OptionalType(type.StringType()),
        'lport_name': type.OptionalType(type.StringType()),
        'nat_rule_id': type.OptionalType(type.IntegerType()),
        'reason': type.OptionalType(type.StringType()),
        'component_name': type.OptionalType(type.StringType()),
        'component_sub_type': type.OptionalType(type.StringType()),
        'component_type': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'sequence_no': type.OptionalType(type.IntegerType()),
        'timestamp': type.OptionalType(type.IntegerType()),
        'timestamp_micro': type.OptionalType(type.IntegerType()),
        'transport_node_id': type.OptionalType(type.StringType()),
        'transport_node_name': type.OptionalType(type.StringType()),
        'transport_node_type': type.OptionalType(type.StringType()),
    },
    PolicyTraceflowObservationDropped,
    False,
    None))



class PolicyTraceflowObservationDroppedLogical(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'acl_rule_path': 'acl_rule_path',
                            'nat_rule_path': 'nat_rule_path',
                            'component_id': 'component_id',
                            'service_path_index': 'service_path_index',
                            'acl_rule_id': 'acl_rule_id',
                            'arp_fail_reason': 'arp_fail_reason',
                            'lport_id': 'lport_id',
                            'lport_name': 'lport_name',
                            'nat_rule_id': 'nat_rule_id',
                            'reason': 'reason',
                            'component_name': 'component_name',
                            'component_sub_type': 'component_sub_type',
                            'component_type': 'component_type',
                            'resource_type': 'resource_type',
                            'sequence_no': 'sequence_no',
                            'timestamp': 'timestamp',
                            'timestamp_micro': 'timestamp_micro',
                            'transport_node_id': 'transport_node_id',
                            'transport_node_name': 'transport_node_name',
                            'transport_node_type': 'transport_node_type',
                            }

    def __init__(self,
                 acl_rule_path=None,
                 nat_rule_path=None,
                 component_id=None,
                 service_path_index=None,
                 acl_rule_id=None,
                 arp_fail_reason=None,
                 lport_id=None,
                 lport_name=None,
                 nat_rule_id=None,
                 reason=None,
                 component_name=None,
                 component_sub_type=None,
                 component_type=None,
                 resource_type=None,
                 sequence_no=None,
                 timestamp=None,
                 timestamp_micro=None,
                 transport_node_id=None,
                 transport_node_name=None,
                 transport_node_type=None,
                ):
        """
        :type  acl_rule_path: :class:`str` or ``None``
        :param acl_rule_path: The path of the ACL rule that was applied to forward the traceflow
            packet
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  nat_rule_path: :class:`str` or ``None``
        :param nat_rule_path: The path of the NAT rule that was applied to forward the traceflow
            packet
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  component_id: :class:`str` or ``None``
        :param component_id: The id of the component that dropped the traceflow packet.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  service_path_index: :class:`long` or ``None``
        :param service_path_index: The index of service path that is a chain of services represents
            the point where the traceflow packet was dropped. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  acl_rule_id: :class:`long` or ``None``
        :param acl_rule_id: The id of the acl rule that was applied to drop the traceflow
            packet format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  arp_fail_reason: :class:`str` or ``None``
        :param arp_fail_reason: Possible values are: 
            
            * :attr:`TraceflowObservationDropped.ARP_FAIL_REASON_UNKNOWN`
            * :attr:`TraceflowObservationDropped.ARP_FAIL_REASON_TIMEOUT`
            * :attr:`TraceflowObservationDropped.ARP_FAIL_REASON_CPFAIL`
            * :attr:`TraceflowObservationDropped.ARP_FAIL_REASON_FROMCP`
            * :attr:`TraceflowObservationDropped.ARP_FAIL_REASON_PORTDESTROY`
            * :attr:`TraceflowObservationDropped.ARP_FAIL_REASON_TABLEDESTROY`
            * :attr:`TraceflowObservationDropped.ARP_FAIL_REASON_NETDESTROY`
            
            This field specifies the ARP fails reason ARP_TIMEOUT - ARP failure
            due to query control plane timeout ARP_CPFAIL - ARP failure due
            post ARP query message to control plane failure ARP_FROMCP - ARP
            failure due to deleting ARP entry from control plane
            ARP_PORTDESTROY - ARP failure due to port destruction
            ARP_TABLEDESTROY - ARP failure due to ARP table destruction
            ARP_NETDESTROY - ARP failure due to overlay network destruction
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  lport_id: :class:`str` or ``None``
        :param lport_id: The id of the logical port at which the traceflow packet was
            dropped
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  lport_name: :class:`str` or ``None``
        :param lport_name: The name of the logical port at which the traceflow packet was
            dropped
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  nat_rule_id: :class:`long` or ``None``
        :param nat_rule_id: The ID of the NAT rule that was applied to forward the traceflow
            packet format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  reason: :class:`str` or ``None``
        :param reason: Possible values are: 
            
            * :attr:`TraceflowObservationDropped.REASON_ARP_FAIL`
            * :attr:`TraceflowObservationDropped.REASON_BFD`
            * :attr:`TraceflowObservationDropped.REASON_DHCP`
            * :attr:`TraceflowObservationDropped.REASON_FW_RULE`
            * :attr:`TraceflowObservationDropped.REASON_GENEVE`
            * :attr:`TraceflowObservationDropped.REASON_GRE`
            * :attr:`TraceflowObservationDropped.REASON_IFACE`
            * :attr:`TraceflowObservationDropped.REASON_IP`
            * :attr:`TraceflowObservationDropped.REASON_IP_REASS`
            * :attr:`TraceflowObservationDropped.REASON_IPSEC`
            * :attr:`TraceflowObservationDropped.REASON_IPSEC_VTI`
            * :attr:`TraceflowObservationDropped.REASON_L2VPN`
            * :attr:`TraceflowObservationDropped.REASON_L4PORT`
            * :attr:`TraceflowObservationDropped.REASON_LB`
            * :attr:`TraceflowObservationDropped.REASON_LROUTER`
            * :attr:`TraceflowObservationDropped.REASON_LSERVICE`
            * :attr:`TraceflowObservationDropped.REASON_LSWITCH`
            * :attr:`TraceflowObservationDropped.REASON_MD_PROXY`
            * :attr:`TraceflowObservationDropped.REASON_NAT`
            * :attr:`TraceflowObservationDropped.REASON_ND_NS_FAIL`
            * :attr:`TraceflowObservationDropped.REASON_NEIGH`
            * :attr:`TraceflowObservationDropped.REASON_NO_EIP_FOUND`
            * :attr:`TraceflowObservationDropped.REASON_NO_EIP_ASSOCIATION`
            * :attr:`TraceflowObservationDropped.REASON_NO_ENI_FOR_IP`
            * :attr:`TraceflowObservationDropped.REASON_NO_ENI_FOR_LIF`
            * :attr:`TraceflowObservationDropped.REASON_NO_ROUTE`
            * :attr:`TraceflowObservationDropped.REASON_NO_ROUTE_TABLE_FOUND`
            *
              :attr:`TraceflowObservationDropped.REASON_NO_UNDERLAY_ROUTE_FOUND`
            * :attr:`TraceflowObservationDropped.REASON_NOT_VDR_DOWNLINK_`
            * :attr:`TraceflowObservationDropped.REASON_NO_VDR_FOUND`
            * :attr:`TraceflowObservationDropped.REASON_NO_VDR_ON_HOST`
            * :attr:`TraceflowObservationDropped.REASON_NOT_VDR_UPLINK_`
            * :attr:`TraceflowObservationDropped.REASON_SERVICE_INSERT`
            * :attr:`TraceflowObservationDropped.REASON_SPOOFGUARD`
            * :attr:`TraceflowObservationDropped.REASON_TTL_ZERO`
            * :attr:`TraceflowObservationDropped.REASON_TUNNEL`
            * :attr:`TraceflowObservationDropped.REASON_VXLAN`
            * :attr:`TraceflowObservationDropped.REASON_VXSTT`
            * :attr:`TraceflowObservationDropped.REASON_VMC_NO_RESPONSE`
            * :attr:`TraceflowObservationDropped.REASON_WRONG_UPLINK`
            * :attr:`TraceflowObservationDropped.REASON_UNKNOWN`
            
             The reason traceflow packet was dropped
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  component_name: :class:`str` or ``None``
        :param component_name: The name of the component that issued the observation.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  component_sub_type: :class:`str` or ``None``
        :param component_sub_type: Possible values are: 
            
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_LR_TIER0`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_LR_TIER1`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_LR_VRF_TIER0`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_LS_TRANSIT`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_SI_CLASSIFIER`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_SI_PROXY`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_VDR`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_ENI`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_AWS_GATEWAY`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_TGW_ROUTE`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_EDGE_UPLINK`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_DELL_GATEWAY`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_UNKNOWN`
            
             The sub type of the component that issued the observation.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  component_type: :class:`str` or ``None``
        :param component_type: Possible values are: 
            
            * :attr:`TraceflowObservation.COMPONENT_TYPE_PHYSICAL`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_LR`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_LS`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_DFW`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_BRIDGE`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_EDGE_TUNNEL`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_EDGE_HOSTSWITCH`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_FW_BRIDGE`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_LOAD_BALANCER`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_NAT`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_IPSEC`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_SERVICE_INSERTION`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_VMC`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_SPOOFGUARD`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_EDGE_FW`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_UNKNOWN`
            
             The type of the component that issued the observation.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONFORWARDED`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONDROPPED`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONDELIVERED`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONRECEIVED`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONFORWARDEDLOGICAL`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONDROPPEDLOGICAL`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONRECEIVEDLOGICAL`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONREPLICATIONLOGICAL`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONRELAYEDLOGICAL`
        :type  sequence_no: :class:`long` or ``None``
        :param sequence_no: the hop count for observations on the transport node that a
            traceflow packet is injected in will be 0. The hop count is
            incremented each time a subsequent transport node receives the
            traceflow packet. The sequence number of 999 indicates that the hop
            count could not be determined for the containing observation.
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  timestamp: :class:`long` or ``None``
        :param timestamp: Timestamp when the observation was created by the transport node
            (milliseconds epoch) format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  timestamp_micro: :class:`long` or ``None``
        :param timestamp_micro: Timestamp when the observation was created by the transport node
            (microseconds epoch) format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  transport_node_id: :class:`str` or ``None``
        :param transport_node_id: id of the transport node that observed a traceflow packet
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  transport_node_name: :class:`str` or ``None``
        :param transport_node_name: name of the transport node that observed a traceflow packet
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  transport_node_type: :class:`str` or ``None``
        :param transport_node_type: Possible values are: 
            
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_ESX`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_RHELKVM`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_UBUNTUKVM`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_EDGE`
            *
              :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_PUBLIC_CLOUD_GATEWAY_NODE`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_OTHERS`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_HYPERV`
            
             type of the transport node that observed a traceflow packet
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.acl_rule_path = acl_rule_path
        self.nat_rule_path = nat_rule_path
        self.component_id = component_id
        self.service_path_index = service_path_index
        self.acl_rule_id = acl_rule_id
        self.arp_fail_reason = arp_fail_reason
        self.lport_id = lport_id
        self.lport_name = lport_name
        self.nat_rule_id = nat_rule_id
        self.reason = reason
        self.component_name = component_name
        self.component_sub_type = component_sub_type
        self.component_type = component_type
        self._resource_type = resource_type
        self.sequence_no = sequence_no
        self.timestamp = timestamp
        self.timestamp_micro = timestamp_micro
        self.transport_node_id = transport_node_id
        self.transport_node_name = transport_node_name
        self.transport_node_type = transport_node_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

PolicyTraceflowObservationDroppedLogical._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_traceflow_observation_dropped_logical', {
        'acl_rule_path': type.OptionalType(type.StringType()),
        'nat_rule_path': type.OptionalType(type.StringType()),
        'component_id': type.OptionalType(type.StringType()),
        'service_path_index': type.OptionalType(type.IntegerType()),
        'acl_rule_id': type.OptionalType(type.IntegerType()),
        'arp_fail_reason': type.OptionalType(type.StringType()),
        'lport_id': type.OptionalType(type.StringType()),
        'lport_name': type.OptionalType(type.StringType()),
        'nat_rule_id': type.OptionalType(type.IntegerType()),
        'reason': type.OptionalType(type.StringType()),
        'component_name': type.OptionalType(type.StringType()),
        'component_sub_type': type.OptionalType(type.StringType()),
        'component_type': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'sequence_no': type.OptionalType(type.IntegerType()),
        'timestamp': type.OptionalType(type.IntegerType()),
        'timestamp_micro': type.OptionalType(type.IntegerType()),
        'transport_node_id': type.OptionalType(type.StringType()),
        'transport_node_name': type.OptionalType(type.StringType()),
        'transport_node_type': type.OptionalType(type.StringType()),
    },
    PolicyTraceflowObservationDroppedLogical,
    False,
    None))



class PolicyTraceflowObservationForwardedLogical(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'acl_rule_path': 'acl_rule_path',
                            'nat_rule_path': 'nat_rule_path',
                            'acl_rule_id': 'acl_rule_id',
                            'component_id': 'component_id',
                            'dst_component_id': 'dst_component_id',
                            'dst_component_name': 'dst_component_name',
                            'dst_component_type': 'dst_component_type',
                            'lport_id': 'lport_id',
                            'lport_name': 'lport_name',
                            'nat_rule_id': 'nat_rule_id',
                            'resend_type': 'resend_type',
                            'service_index': 'service_index',
                            'service_path_index': 'service_path_index',
                            'service_ttl': 'service_ttl',
                            'spoofguard_ip': 'spoofguard_ip',
                            'spoofguard_mac': 'spoofguard_mac',
                            'spoofguard_vlan_id': 'spoofguard_vlan_id',
                            'svc_nh_mac': 'svc_nh_mac',
                            'translated_dst_ip': 'translated_dst_ip',
                            'translated_src_ip': 'translated_src_ip',
                            'vni': 'vni',
                            'component_name': 'component_name',
                            'component_sub_type': 'component_sub_type',
                            'component_type': 'component_type',
                            'resource_type': 'resource_type',
                            'sequence_no': 'sequence_no',
                            'timestamp': 'timestamp',
                            'timestamp_micro': 'timestamp_micro',
                            'transport_node_id': 'transport_node_id',
                            'transport_node_name': 'transport_node_name',
                            'transport_node_type': 'transport_node_type',
                            }

    def __init__(self,
                 acl_rule_path=None,
                 nat_rule_path=None,
                 acl_rule_id=None,
                 component_id=None,
                 dst_component_id=None,
                 dst_component_name=None,
                 dst_component_type=None,
                 lport_id=None,
                 lport_name=None,
                 nat_rule_id=None,
                 resend_type=None,
                 service_index=None,
                 service_path_index=None,
                 service_ttl=None,
                 spoofguard_ip=None,
                 spoofguard_mac=None,
                 spoofguard_vlan_id=None,
                 svc_nh_mac=None,
                 translated_dst_ip=None,
                 translated_src_ip=None,
                 vni=None,
                 component_name=None,
                 component_sub_type=None,
                 component_type=None,
                 resource_type=None,
                 sequence_no=None,
                 timestamp=None,
                 timestamp_micro=None,
                 transport_node_id=None,
                 transport_node_name=None,
                 transport_node_type=None,
                ):
        """
        :type  acl_rule_path: :class:`str` or ``None``
        :param acl_rule_path: The path of the ACL rule that was applied to forward the traceflow
            packet
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  nat_rule_path: :class:`str` or ``None``
        :param nat_rule_path: The path of the NAT rule that was applied to forward the traceflow
            packet
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  acl_rule_id: :class:`long` or ``None``
        :param acl_rule_id: The id of the acl rule that was applied to forward the traceflow
            packet format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  component_id: :class:`str` or ``None``
        :param component_id: The id of the component that forwarded the traceflow packet.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  dst_component_id: :class:`str` or ``None``
        :param dst_component_id: The id of the destination component to which the traceflow packet
            was forwarded.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  dst_component_name: :class:`str` or ``None``
        :param dst_component_name: The name of the destination component to which the traceflow packet
            was forwarded.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  dst_component_type: :class:`str` or ``None``
        :param dst_component_type: Possible values are: 
            
            *
              :attr:`TraceflowObservationForwardedLogical.DST_COMPONENT_TYPE_PHYSICAL`
            *
              :attr:`TraceflowObservationForwardedLogical.DST_COMPONENT_TYPE_LR`
            *
              :attr:`TraceflowObservationForwardedLogical.DST_COMPONENT_TYPE_LS`
            *
              :attr:`TraceflowObservationForwardedLogical.DST_COMPONENT_TYPE_DFW`
            *
              :attr:`TraceflowObservationForwardedLogical.DST_COMPONENT_TYPE_BRIDGE`
            *
              :attr:`TraceflowObservationForwardedLogical.DST_COMPONENT_TYPE_EDGE_TUNNEL`
            *
              :attr:`TraceflowObservationForwardedLogical.DST_COMPONENT_TYPE_EDGE_HOSTSWITCH`
            *
              :attr:`TraceflowObservationForwardedLogical.DST_COMPONENT_TYPE_FW_BRIDGE`
            *
              :attr:`TraceflowObservationForwardedLogical.DST_COMPONENT_TYPE_LOAD_BALANCER`
            *
              :attr:`TraceflowObservationForwardedLogical.DST_COMPONENT_TYPE_NAT`
            *
              :attr:`TraceflowObservationForwardedLogical.DST_COMPONENT_TYPE_IPSEC`
            *
              :attr:`TraceflowObservationForwardedLogical.DST_COMPONENT_TYPE_SERVICE_INSERTION`
            *
              :attr:`TraceflowObservationForwardedLogical.DST_COMPONENT_TYPE_VMC`
            *
              :attr:`TraceflowObservationForwardedLogical.DST_COMPONENT_TYPE_SPOOFGUARD`
            *
              :attr:`TraceflowObservationForwardedLogical.DST_COMPONENT_TYPE_EDGE_FW`
            *
              :attr:`TraceflowObservationForwardedLogical.DST_COMPONENT_TYPE_UNKNOWN`
            
            The type of the destination component to which the traceflow packet
            was forwarded.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  lport_id: :class:`str` or ``None``
        :param lport_id: The id of the logical port through which the traceflow packet was
            forwarded.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  lport_name: :class:`str` or ``None``
        :param lport_name: The name of the logical port through which the traceflow packet was
            forwarded.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  nat_rule_id: :class:`long` or ``None``
        :param nat_rule_id: The ID of the NAT rule that was applied to forward the traceflow
            packet format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  resend_type: :class:`str` or ``None``
        :param resend_type: Possible values are: 
            
            * :attr:`TraceflowObservationForwardedLogical.RESEND_TYPE_UNKNOWN`
            *
              :attr:`TraceflowObservationForwardedLogical.RESEND_TYPE_ARP_UNKNOWN_FROM_CP`
            *
              :attr:`TraceflowObservationForwardedLogical.RESEND_TYPE_ND_NS_UNKNWON_FROM_CP`
            
            ARP_UNKNOWN_FROM_CP - Unknown ARP query result emitted by control
            plane ND_NS_UNKNOWN_FROM_CP - Unknown neighbor solicitation query
            result emitted by control plane UNKNOWN - Unknown resend type
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  service_index: :class:`long` or ``None``
        :param service_index: The index of the service insertion component format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  service_path_index: :class:`long` or ``None``
        :param service_path_index: The path index of the service insertion component format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  service_ttl: :class:`long` or ``None``
        :param service_ttl: The ttl of the service insertion component format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  spoofguard_ip: :class:`str` or ``None``
        :param spoofguard_ip: This field specified the prefix IP address a traceflow packet
            matched in the whitelist in spoofguard. format: ip-cidr-block
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  spoofguard_mac: :class:`str` or ``None``
        :param spoofguard_mac: The source MAC address of form:
            \"^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$\". For example:
            00:00:00:00:00:00. format: mac-address
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  spoofguard_vlan_id: :class:`long` or ``None``
        :param spoofguard_vlan_id: This field specified the VLAN id a traceflow packet matched in the
            whitelist in spoofguard. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  svc_nh_mac: :class:`str` or ``None``
        :param svc_nh_mac: MAC address of nexthop for service insertion(SI) in service VM(SVM)
            where the traceflow packet was received.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  translated_dst_ip: :class:`str` or ``None``
        :param translated_dst_ip: The translated destination IP address of VNP/NAT format: ip
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  translated_src_ip: :class:`str` or ``None``
        :param translated_src_ip: The translated source IP address of VPN/NAT format: ip
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  vni: :class:`long` or ``None``
        :param vni: VNI for the logical network on which the traceflow packet was
            forwarded. format: int32
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  component_name: :class:`str` or ``None``
        :param component_name: The name of the component that issued the observation.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  component_sub_type: :class:`str` or ``None``
        :param component_sub_type: Possible values are: 
            
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_LR_TIER0`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_LR_TIER1`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_LR_VRF_TIER0`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_LS_TRANSIT`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_SI_CLASSIFIER`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_SI_PROXY`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_VDR`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_ENI`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_AWS_GATEWAY`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_TGW_ROUTE`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_EDGE_UPLINK`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_DELL_GATEWAY`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_UNKNOWN`
            
             The sub type of the component that issued the observation.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  component_type: :class:`str` or ``None``
        :param component_type: Possible values are: 
            
            * :attr:`TraceflowObservation.COMPONENT_TYPE_PHYSICAL`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_LR`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_LS`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_DFW`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_BRIDGE`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_EDGE_TUNNEL`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_EDGE_HOSTSWITCH`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_FW_BRIDGE`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_LOAD_BALANCER`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_NAT`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_IPSEC`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_SERVICE_INSERTION`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_VMC`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_SPOOFGUARD`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_EDGE_FW`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_UNKNOWN`
            
             The type of the component that issued the observation.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONFORWARDED`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONDROPPED`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONDELIVERED`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONRECEIVED`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONFORWARDEDLOGICAL`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONDROPPEDLOGICAL`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONRECEIVEDLOGICAL`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONREPLICATIONLOGICAL`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONRELAYEDLOGICAL`
        :type  sequence_no: :class:`long` or ``None``
        :param sequence_no: the hop count for observations on the transport node that a
            traceflow packet is injected in will be 0. The hop count is
            incremented each time a subsequent transport node receives the
            traceflow packet. The sequence number of 999 indicates that the hop
            count could not be determined for the containing observation.
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  timestamp: :class:`long` or ``None``
        :param timestamp: Timestamp when the observation was created by the transport node
            (milliseconds epoch) format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  timestamp_micro: :class:`long` or ``None``
        :param timestamp_micro: Timestamp when the observation was created by the transport node
            (microseconds epoch) format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  transport_node_id: :class:`str` or ``None``
        :param transport_node_id: id of the transport node that observed a traceflow packet
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  transport_node_name: :class:`str` or ``None``
        :param transport_node_name: name of the transport node that observed a traceflow packet
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  transport_node_type: :class:`str` or ``None``
        :param transport_node_type: Possible values are: 
            
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_ESX`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_RHELKVM`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_UBUNTUKVM`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_EDGE`
            *
              :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_PUBLIC_CLOUD_GATEWAY_NODE`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_OTHERS`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_HYPERV`
            
             type of the transport node that observed a traceflow packet
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.acl_rule_path = acl_rule_path
        self.nat_rule_path = nat_rule_path
        self.acl_rule_id = acl_rule_id
        self.component_id = component_id
        self.dst_component_id = dst_component_id
        self.dst_component_name = dst_component_name
        self.dst_component_type = dst_component_type
        self.lport_id = lport_id
        self.lport_name = lport_name
        self.nat_rule_id = nat_rule_id
        self.resend_type = resend_type
        self.service_index = service_index
        self.service_path_index = service_path_index
        self.service_ttl = service_ttl
        self.spoofguard_ip = spoofguard_ip
        self.spoofguard_mac = spoofguard_mac
        self.spoofguard_vlan_id = spoofguard_vlan_id
        self.svc_nh_mac = svc_nh_mac
        self.translated_dst_ip = translated_dst_ip
        self.translated_src_ip = translated_src_ip
        self.vni = vni
        self.component_name = component_name
        self.component_sub_type = component_sub_type
        self.component_type = component_type
        self._resource_type = resource_type
        self.sequence_no = sequence_no
        self.timestamp = timestamp
        self.timestamp_micro = timestamp_micro
        self.transport_node_id = transport_node_id
        self.transport_node_name = transport_node_name
        self.transport_node_type = transport_node_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

PolicyTraceflowObservationForwardedLogical._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_traceflow_observation_forwarded_logical', {
        'acl_rule_path': type.OptionalType(type.StringType()),
        'nat_rule_path': type.OptionalType(type.StringType()),
        'acl_rule_id': type.OptionalType(type.IntegerType()),
        'component_id': type.OptionalType(type.StringType()),
        'dst_component_id': type.OptionalType(type.StringType()),
        'dst_component_name': type.OptionalType(type.StringType()),
        'dst_component_type': type.OptionalType(type.StringType()),
        'lport_id': type.OptionalType(type.StringType()),
        'lport_name': type.OptionalType(type.StringType()),
        'nat_rule_id': type.OptionalType(type.IntegerType()),
        'resend_type': type.OptionalType(type.StringType()),
        'service_index': type.OptionalType(type.IntegerType()),
        'service_path_index': type.OptionalType(type.IntegerType()),
        'service_ttl': type.OptionalType(type.IntegerType()),
        'spoofguard_ip': type.OptionalType(type.StringType()),
        'spoofguard_mac': type.OptionalType(type.StringType()),
        'spoofguard_vlan_id': type.OptionalType(type.IntegerType()),
        'svc_nh_mac': type.OptionalType(type.StringType()),
        'translated_dst_ip': type.OptionalType(type.StringType()),
        'translated_src_ip': type.OptionalType(type.StringType()),
        'vni': type.OptionalType(type.IntegerType()),
        'component_name': type.OptionalType(type.StringType()),
        'component_sub_type': type.OptionalType(type.StringType()),
        'component_type': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'sequence_no': type.OptionalType(type.IntegerType()),
        'timestamp': type.OptionalType(type.IntegerType()),
        'timestamp_micro': type.OptionalType(type.IntegerType()),
        'transport_node_id': type.OptionalType(type.StringType()),
        'transport_node_name': type.OptionalType(type.StringType()),
        'transport_node_type': type.OptionalType(type.StringType()),
    },
    PolicyTraceflowObservationForwardedLogical,
    False,
    None))



class PolicyTransportZone(VapiStruct):
    """
    Transport Zone.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    TZ_TYPE_OVERLAY_STANDARD = "OVERLAY_STANDARD"
    """


    """
    TZ_TYPE_OVERLAY_ENS = "OVERLAY_ENS"
    """


    """
    TZ_TYPE_VLAN_BACKED = "VLAN_BACKED"
    """


    """
    TZ_TYPE_UNKNOWN = "UNKNOWN"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'is_default': 'is_default',
                            'nsx_id': 'nsx_id',
                            'tz_type': 'tz_type',
                            'uplink_teaming_policy_names': 'uplink_teaming_policy_names',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 is_default=None,
                 nsx_id=None,
                 tz_type=None,
                 uplink_teaming_policy_names=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  is_default: :class:`bool` or ``None``
        :param is_default: Flag to indicate if the transport zone is the default one. Only one
            transport zone can be the default one for a given transport zone
            type.
        :type  nsx_id: :class:`str` or ``None``
        :param nsx_id: UUID of transport zone on NSX-T enforcement point.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  tz_type: :class:`str` or ``None``
        :param tz_type: Possible values are: 
            
            * :attr:`PolicyTransportZone.TZ_TYPE_OVERLAY_STANDARD`
            * :attr:`PolicyTransportZone.TZ_TYPE_OVERLAY_ENS`
            * :attr:`PolicyTransportZone.TZ_TYPE_VLAN_BACKED`
            * :attr:`PolicyTransportZone.TZ_TYPE_UNKNOWN`
            
             Transport Zone Type.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  uplink_teaming_policy_names: :class:`list` of :class:`str` or ``None``
        :param uplink_teaming_policy_names: The names of switching uplink teaming policies that all transport
            nodes in this transport zone support. Uplinkin teaming policies are
            only valid for VLAN backed transport zones.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.is_default = is_default
        self.nsx_id = nsx_id
        self.tz_type = tz_type
        self.uplink_teaming_policy_names = uplink_teaming_policy_names
        VapiStruct.__init__(self)


PolicyTransportZone._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_transport_zone', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'is_default': type.OptionalType(type.BooleanType()),
        'nsx_id': type.OptionalType(type.StringType()),
        'tz_type': type.OptionalType(type.StringType()),
        'uplink_teaming_policy_names': type.OptionalType(type.ListType(type.StringType())),
    },
    PolicyTransportZone,
    False,
    None))



class PolicyTransportZoneListResult(VapiStruct):
    """
    Paged Collection of Transport Zone

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`PolicyTransportZone` or ``None``
        :param results: Transport Zone list result.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


PolicyTransportZoneListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_transport_zone_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyTransportZone'))),
    },
    PolicyTransportZoneListResult,
    False,
    None))



class PolicyUrlCategorizationConfig(VapiStruct):
    """
    The type contains information about the configuration of the feature for a
    specific node. It contains information like the whether the feature is
    enabled/disabled, the context profiles defining the category list to
    detect.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'context_profiles': 'context_profiles',
                            'enabled': 'enabled',
                            'update_frequency': 'update_frequency',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 context_profiles=None,
                 enabled=None,
                 update_frequency=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  context_profiles: :class:`list` of :class:`str` or ``None``
        :param context_profiles: The ids of the context profiles that provides the list of
            categories to be detected.
        :type  enabled: :class:`bool` or ``None``
        :param enabled: Property which specifies the enabling/disabling of the feature.
        :type  update_frequency: :class:`long` or ``None``
        :param update_frequency: The frequency in minutes at which the updates are downloaded from
            the URL categorization cloud service. The minimum allowed value is
            5 minutes. format: int32
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.context_profiles = context_profiles
        self.enabled = enabled
        self.update_frequency = update_frequency
        VapiStruct.__init__(self)


PolicyUrlCategorizationConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_url_categorization_config', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'context_profiles': type.OptionalType(type.ListType(type.StringType())),
        'enabled': type.OptionalType(type.BooleanType()),
        'update_frequency': type.OptionalType(type.IntegerType()),
    },
    PolicyUrlCategorizationConfig,
    False,
    None))



class PolicyUrlCategory(VapiStruct):
    """
    Every URL is classified into one or more of 83 pre-defined categories.
    Examples of categories are 'Shopping', 'Financial Services', 'Travel', etc.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'category_id': 'category_id',
                            'category_name': 'category_name',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 category_id=None,
                 category_name=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  category_id: :class:`long` or ``None``
        :param category_id: The id of the category. format: int32
        :type  category_name: :class:`str` or ``None``
        :param category_name: The name of the category.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.category_id = category_id
        self.category_name = category_name
        VapiStruct.__init__(self)


PolicyUrlCategory._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_url_category', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'category_id': type.OptionalType(type.IntegerType()),
        'category_name': type.OptionalType(type.StringType()),
    },
    PolicyUrlCategory,
    False,
    None))



class PolicyUrlCategoryListResult(VapiStruct):
    """
    List of Policy URL categories.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`PolicyUrlCategory` or ``None``
        :param results: Category list result
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


PolicyUrlCategoryListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_url_category_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyUrlCategory'))),
    },
    PolicyUrlCategoryListResult,
    False,
    None))



class PolicyUrlReputationSeverity(VapiStruct):
    """
    The reputation severity of an URL.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'max_reputation': 'max_reputation',
                            'min_reputation': 'min_reputation',
                            'name': 'name',
                            'reputation_severity_id': 'reputation_severity_id',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 max_reputation=None,
                 min_reputation=None,
                 name=None,
                 reputation_severity_id=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  max_reputation: :class:`long` or ``None``
        :param max_reputation: The maximum reputation for the severity. format: int32
        :type  min_reputation: :class:`long` or ``None``
        :param min_reputation: The minimum reputation for the severity. format: int32
        :type  name: :class:`str` or ``None``
        :param name: The name of the severity.
        :type  reputation_severity_id: :class:`long` or ``None``
        :param reputation_severity_id: The id of the reputation severity. format: int32
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.max_reputation = max_reputation
        self.min_reputation = min_reputation
        self.name = name
        self.reputation_severity_id = reputation_severity_id
        VapiStruct.__init__(self)


PolicyUrlReputationSeverity._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_url_reputation_severity', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'max_reputation': type.OptionalType(type.IntegerType()),
        'min_reputation': type.OptionalType(type.IntegerType()),
        'name': type.OptionalType(type.StringType()),
        'reputation_severity_id': type.OptionalType(type.IntegerType()),
    },
    PolicyUrlReputationSeverity,
    False,
    None))



class PolicyUrlReputationSeverityListResult(VapiStruct):
    """
    List of URL reputation severities.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`PolicyUrlReputationSeverity` or ``None``
        :param results: Reputation Severity list
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


PolicyUrlReputationSeverityListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.policy_url_reputation_severity_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyUrlReputationSeverity'))),
    },
    PolicyUrlReputationSeverityListResult,
    False,
    None))



class PoolMemberSetting(VapiStruct):
    """
    The setting is used to add, update or remove pool members from pool. For
    static pool members, admin_state, display_name and weight can be updated.
    For dynamic pool members, only admin_state can be updated.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    ADMIN_STATE_ENABLED = "ENABLED"
    """


    """
    ADMIN_STATE_DISABLED = "DISABLED"
    """


    """
    ADMIN_STATE_GRACEFUL_DISABLED = "GRACEFUL_DISABLED"
    """


    """



    _canonical_to_pep_names = {
                            'admin_state': 'admin_state',
                            'display_name': 'display_name',
                            'ip_address': 'ip_address',
                            'port': 'port',
                            'weight': 'weight',
                            }

    def __init__(self,
                 admin_state=None,
                 display_name=None,
                 ip_address=None,
                 port=None,
                 weight=None,
                ):
        """
        :type  admin_state: :class:`str` or ``None``
        :param admin_state: Possible values are: 
            
            * :attr:`PoolMemberSetting.ADMIN_STATE_ENABLED`
            * :attr:`PoolMemberSetting.ADMIN_STATE_DISABLED`
            * :attr:`PoolMemberSetting.ADMIN_STATE_GRACEFUL_DISABLED`
            
             Member admin state
        :type  display_name: :class:`str` or ``None``
        :param display_name: Only applicable to static pool members. If supplied for a pool
            defined by a grouping object, update API would fail.
        :type  ip_address: :class:`str` or ``None``
        :param ip_address: Pool member IP address format: ip
        :type  port: :class:`str` or ``None``
        :param port: Pool member port number format: port-or-range
        :type  weight: :class:`long` or ``None``
        :param weight: Only applicable to static pool members. If supplied for a pool
            defined by a grouping object, update API would fail. format: int64
        """
        self.admin_state = admin_state
        self.display_name = display_name
        self.ip_address = ip_address
        self.port = port
        self.weight = weight
        VapiStruct.__init__(self)


PoolMemberSetting._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.pool_member_setting', {
        'admin_state': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'ip_address': type.OptionalType(type.StringType()),
        'port': type.OptionalType(type.StringType()),
        'weight': type.OptionalType(type.IntegerType()),
    },
    PoolMemberSetting,
    False,
    None))



class PortAddressBindingEntry(VapiStruct):
    """
    Detailed information about static address for the port.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'ip_address': 'ip_address',
                            'mac_address': 'mac_address',
                            'vlan_id': 'vlan_id',
                            }

    def __init__(self,
                 ip_address=None,
                 mac_address=None,
                 vlan_id=None,
                ):
        """
        :type  ip_address: :class:`str` or ``None``
        :param ip_address: IP Address for port binding
        :type  mac_address: :class:`str` or ``None``
        :param mac_address: Mac address for port binding format: mac-address
        :type  vlan_id: :class:`long` or ``None``
        :param vlan_id: VLAN ID for port binding format: int64
        """
        self.ip_address = ip_address
        self.mac_address = mac_address
        self.vlan_id = vlan_id
        VapiStruct.__init__(self)


PortAddressBindingEntry._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.port_address_binding_entry', {
        'ip_address': type.OptionalType(type.StringType()),
        'mac_address': type.OptionalType(type.StringType()),
        'vlan_id': type.OptionalType(type.IntegerType()),
    },
    PortAddressBindingEntry,
    False,
    None))



class PortAttachment(VapiStruct):
    """
    Detail information about port attachment

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    ALLOCATE_ADDRESSES_IP_POOL = "IP_POOL"
    """


    """
    ALLOCATE_ADDRESSES_MAC_POOL = "MAC_POOL"
    """


    """
    ALLOCATE_ADDRESSES_BOTH = "BOTH"
    """


    """
    ALLOCATE_ADDRESSES_NONE = "NONE"
    """


    """
    CONTEXT_TYPE_PARENT = "PARENT"
    """


    """
    HYPERBUS_MODE_ENABLE = "ENABLE"
    """


    """
    HYPERBUS_MODE_DISABLE = "DISABLE"
    """


    """
    TYPE_PARENT = "PARENT"
    """


    """
    TYPE_CHILD = "CHILD"
    """


    """
    TYPE_INDEPENDENT = "INDEPENDENT"
    """


    """
    TYPE_STATIC = "STATIC"
    """


    """



    _canonical_to_pep_names = {
                            'allocate_addresses': 'allocate_addresses',
                            'app_id': 'app_id',
                            'context_id': 'context_id',
                            'context_type': 'context_type',
                            'hyperbus_mode': 'hyperbus_mode',
                            'id': 'id',
                            'traffic_tag': 'traffic_tag',
                            'type': 'type',
                            }

    def __init__(self,
                 allocate_addresses=None,
                 app_id=None,
                 context_id=None,
                 context_type=None,
                 hyperbus_mode=None,
                 id=None,
                 traffic_tag=None,
                 type=None,
                ):
        """
        :type  allocate_addresses: :class:`str` or ``None``
        :param allocate_addresses: Possible values are: 
            
            * :attr:`PortAttachment.ALLOCATE_ADDRESSES_IP_POOL`
            * :attr:`PortAttachment.ALLOCATE_ADDRESSES_MAC_POOL`
            * :attr:`PortAttachment.ALLOCATE_ADDRESSES_BOTH`
            * :attr:`PortAttachment.ALLOCATE_ADDRESSES_NONE`
            
             Indicate how IP will be allocated for the port
        :type  app_id: :class:`str` or ``None``
        :param app_id: ID used to identify/look up a child attachment behind a parent
            attachment
        :type  context_id: :class:`str` or ``None``
        :param context_id: If type is CHILD and the parent port is on the same segment as the
            child port, then this field should be VIF ID of the parent port. If
            type is CHILD and the parent port is on a different segment, then
            this field should be policy path of the parent port. If type is
            INDEPENDENT/STATIC, then this field should be transport node ID.
        :type  context_type: :class:`str` or ``None``
        :param context_type: Possible values are: 
            
            * :attr:`PortAttachment.CONTEXT_TYPE_PARENT`
            
             Set to PARENT when type field is CHILD. Read only field.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  hyperbus_mode: :class:`str` or ``None``
        :param hyperbus_mode: Possible values are: 
            
            * :attr:`PortAttachment.HYPERBUS_MODE_ENABLE`
            * :attr:`PortAttachment.HYPERBUS_MODE_DISABLE`
            
             Flag to indicate if hyperbus configuration is required.
        :type  id: :class:`str` or ``None``
        :param id: VIF UUID on NSX Manager. If the attachement type is PARENT, this
            property is required.
        :type  traffic_tag: :class:`long` or ``None``
        :param traffic_tag: Not valid when type field is INDEPENDENT, mainly used to identify
            traffic from different ports in container use case. format: int64
        :type  type: :class:`str` or ``None``
        :param type: Possible values are: 
            
            * :attr:`PortAttachment.TYPE_PARENT`
            * :attr:`PortAttachment.TYPE_CHILD`
            * :attr:`PortAttachment.TYPE_INDEPENDENT`
            * :attr:`PortAttachment.TYPE_STATIC`
            
            Type of port attachment. STATIC is added to replace INDEPENDENT.
            INDEPENDENT type and PARENT type are deprecated.
        """
        self.allocate_addresses = allocate_addresses
        self.app_id = app_id
        self.context_id = context_id
        self.context_type = context_type
        self.hyperbus_mode = hyperbus_mode
        self.id = id
        self.traffic_tag = traffic_tag
        self.type = type
        VapiStruct.__init__(self)


PortAttachment._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.port_attachment', {
        'allocate_addresses': type.OptionalType(type.StringType()),
        'app_id': type.OptionalType(type.StringType()),
        'context_id': type.OptionalType(type.StringType()),
        'context_type': type.OptionalType(type.StringType()),
        'hyperbus_mode': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'traffic_tag': type.OptionalType(type.IntegerType()),
        'type': type.OptionalType(type.StringType()),
    },
    PortAttachment,
    False,
    None))



class PortDiscoveryProfileBindingMap(VapiStruct):
    """
    This entity will be used to establish association between discovery profile
    and Port. Using this entity, user can specify intent for applying discovery
    profile to particular Port. Port here is Logical Port.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'ip_discovery_profile_path': 'ip_discovery_profile_path',
                            'mac_discovery_profile_path': 'mac_discovery_profile_path',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 ip_discovery_profile_path=None,
                 mac_discovery_profile_path=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  ip_discovery_profile_path: :class:`str` or ``None``
        :param ip_discovery_profile_path: PolicyPath of associated IP Discovery Profile
        :type  mac_discovery_profile_path: :class:`str` or ``None``
        :param mac_discovery_profile_path: PolicyPath of associated Mac Discovery Profile
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.ip_discovery_profile_path = ip_discovery_profile_path
        self.mac_discovery_profile_path = mac_discovery_profile_path
        VapiStruct.__init__(self)


PortDiscoveryProfileBindingMap._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.port_discovery_profile_binding_map', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'ip_discovery_profile_path': type.OptionalType(type.StringType()),
        'mac_discovery_profile_path': type.OptionalType(type.StringType()),
    },
    PortDiscoveryProfileBindingMap,
    False,
    None))



class PortDiscoveryProfileBindingMapListResult(VapiStruct):
    """
    Paged collection of Port Discovery Profile Binding Maps

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`PortDiscoveryProfileBindingMap` or ``None``
        :param results: Port Discovery Profile Binding Map list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


PortDiscoveryProfileBindingMapListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.port_discovery_profile_binding_map_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PortDiscoveryProfileBindingMap'))),
    },
    PortDiscoveryProfileBindingMapListResult,
    False,
    None))



class PortMirroringInstance(VapiStruct):
    """
    Mirrors Data from source to destination

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    DIRECTION_INGRESS = "INGRESS"
    """


    """
    DIRECTION_EGRESS = "EGRESS"
    """


    """
    DIRECTION_BIDIRECTIONAL = "BIDIRECTIONAL"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'destination_group': 'destination_group',
                            'direction': 'direction',
                            'snap_length': 'snap_length',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 destination_group=None,
                 direction=None,
                 snap_length=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  destination_group: :class:`str` or ``None``
        :param destination_group: Data from source group will be copied to members of destination
            group.
        :type  direction: :class:`str` or ``None``
        :param direction: Possible values are: 
            
            * :attr:`PortMirroringInstance.DIRECTION_INGRESS`
            * :attr:`PortMirroringInstance.DIRECTION_EGRESS`
            * :attr:`PortMirroringInstance.DIRECTION_BIDIRECTIONAL`
            
             Port mirroring instance direction
        :type  snap_length: :class:`long` or ``None``
        :param snap_length: If this property is set, the packet will be truncated to the
            provided length. If this property is unset, entire packet will be
            mirrored. format: int32
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.destination_group = destination_group
        self.direction = direction
        self.snap_length = snap_length
        VapiStruct.__init__(self)


PortMirroringInstance._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.port_mirroring_instance', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'destination_group': type.OptionalType(type.StringType()),
        'direction': type.OptionalType(type.StringType()),
        'snap_length': type.OptionalType(type.IntegerType()),
    },
    PortMirroringInstance,
    False,
    None))



class PortMirroringInstanceListResult(VapiStruct):
    """
    Paged collection of port mirroring instances

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`PortMirroringInstance` or ``None``
        :param results: Port Mirroring Instances list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


PortMirroringInstanceListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.port_mirroring_instance_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PortMirroringInstance'))),
    },
    PortMirroringInstanceListResult,
    False,
    None))



class PortMirroringProfile(VapiStruct):
    """
    Mirrors Data from source to destination

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    DIRECTION_INGRESS = "INGRESS"
    """


    """
    DIRECTION_EGRESS = "EGRESS"
    """


    """
    DIRECTION_BIDIRECTIONAL = "BIDIRECTIONAL"
    """


    """
    ENCAPSULATION_TYPE_GRE = "GRE"
    """


    """
    ENCAPSULATION_TYPE_ERSPAN_TWO = "ERSPAN_TWO"
    """


    """
    ENCAPSULATION_TYPE_ERSPAN_THREE = "ERSPAN_THREE"
    """


    """
    PROFILE_TYPE_REMOTE_L3_SPAN = "REMOTE_L3_SPAN"
    """


    """
    PROFILE_TYPE_LOGICAL_SPAN = "LOGICAL_SPAN"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'destination_group': 'destination_group',
                            'direction': 'direction',
                            'encapsulation_type': 'encapsulation_type',
                            'erspan_id': 'erspan_id',
                            'gre_key': 'gre_key',
                            'profile_type': 'profile_type',
                            'snap_length': 'snap_length',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 destination_group=None,
                 direction=None,
                 encapsulation_type=None,
                 erspan_id=None,
                 gre_key=None,
                 profile_type=None,
                 snap_length=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  destination_group: :class:`str` or ``None``
        :param destination_group: Data from source group will be copied to members of destination
            group. Only IPSET group and group with membership criteria VM is
            supported. IPSET group allows only three ip's.
        :type  direction: :class:`str` or ``None``
        :param direction: Possible values are: 
            
            * :attr:`PortMirroringProfile.DIRECTION_INGRESS`
            * :attr:`PortMirroringProfile.DIRECTION_EGRESS`
            * :attr:`PortMirroringProfile.DIRECTION_BIDIRECTIONAL`
            
             Port mirroring profile direction
        :type  encapsulation_type: :class:`str` or ``None``
        :param encapsulation_type: Possible values are: 
            
            * :attr:`PortMirroringProfile.ENCAPSULATION_TYPE_GRE`
            * :attr:`PortMirroringProfile.ENCAPSULATION_TYPE_ERSPAN_TWO`
            * :attr:`PortMirroringProfile.ENCAPSULATION_TYPE_ERSPAN_THREE`
            
            User can provide Mirror Destination type e.g GRE, ERSPAN_TWO or
            ERSPAN_THREE.If profile type is REMOTE_L3_SPAN, encapsulation type
            is used else ignored.
        :type  erspan_id: :class:`long` or ``None``
        :param erspan_id: Used by physical switch for the mirror traffic forwarding. Must be
            provided and only effective when encapsulation type is ERSPAN type
            II or type III. format: int32
        :type  gre_key: :class:`long` or ``None``
        :param gre_key: User-configurable 32-bit key only for GRE format: int32
        :type  profile_type: :class:`str` or ``None``
        :param profile_type: Possible values are: 
            
            * :attr:`PortMirroringProfile.PROFILE_TYPE_REMOTE_L3_SPAN`
            * :attr:`PortMirroringProfile.PROFILE_TYPE_LOGICAL_SPAN`
            
             Allows user to select type of port mirroring session.
        :type  snap_length: :class:`long` or ``None``
        :param snap_length: If this property is set, the packet will be truncated to the
            provided length. If this property is unset, entire packet will be
            mirrored. format: int32
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.destination_group = destination_group
        self.direction = direction
        self.encapsulation_type = encapsulation_type
        self.erspan_id = erspan_id
        self.gre_key = gre_key
        self.profile_type = profile_type
        self.snap_length = snap_length
        VapiStruct.__init__(self)


PortMirroringProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.port_mirroring_profile', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'destination_group': type.OptionalType(type.StringType()),
        'direction': type.OptionalType(type.StringType()),
        'encapsulation_type': type.OptionalType(type.StringType()),
        'erspan_id': type.OptionalType(type.IntegerType()),
        'gre_key': type.OptionalType(type.IntegerType()),
        'profile_type': type.OptionalType(type.StringType()),
        'snap_length': type.OptionalType(type.IntegerType()),
    },
    PortMirroringProfile,
    False,
    None))



class PortMirroringProfileListResult(VapiStruct):
    """
    Paged collection of port mirroring profiles

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`PortMirroringProfile` or ``None``
        :param results: Port Mirroring Profiles list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


PortMirroringProfileListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.port_mirroring_profile_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PortMirroringProfile'))),
    },
    PortMirroringProfileListResult,
    False,
    None))



class PortMonitoringProfileBindingMap(VapiStruct):
    """
    This entity will be used to establish association between monitoring
    profile and Port. Using this entity, user can specify intent for applying
    monitoring profile to particular Port. Port here is Segment Port.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'ipfix_l2_profile_path': 'ipfix_l2_profile_path',
                            'port_mirroring_profile_path': 'port_mirroring_profile_path',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 ipfix_l2_profile_path=None,
                 port_mirroring_profile_path=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  ipfix_l2_profile_path: :class:`str` or ``None``
        :param ipfix_l2_profile_path: PolicyPath of associated IPFIX L2 Profile
        :type  port_mirroring_profile_path: :class:`str` or ``None``
        :param port_mirroring_profile_path: PolicyPath of associated Port Mirroring Profile
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.ipfix_l2_profile_path = ipfix_l2_profile_path
        self.port_mirroring_profile_path = port_mirroring_profile_path
        VapiStruct.__init__(self)


PortMonitoringProfileBindingMap._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.port_monitoring_profile_binding_map', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'ipfix_l2_profile_path': type.OptionalType(type.StringType()),
        'port_mirroring_profile_path': type.OptionalType(type.StringType()),
    },
    PortMonitoringProfileBindingMap,
    False,
    None))



class PortMonitoringProfileBindingMapListResult(VapiStruct):
    """
    Paged collection of Port Monitoring Profile Binding Maps

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`PortMonitoringProfileBindingMap` or ``None``
        :param results: Port Monitoring Profile Binding Map list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


PortMonitoringProfileBindingMapListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.port_monitoring_profile_binding_map_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PortMonitoringProfileBindingMap'))),
    },
    PortMonitoringProfileBindingMapListResult,
    False,
    None))



class PortQosProfileBindingMap(VapiStruct):
    """
    This entity will be used to establish association between qos profile and
    Port. Using this entity, you can specify intent for applying qos profile to
    particular Port. Port here is Segment Port.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'qos_profile_path': 'qos_profile_path',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 qos_profile_path=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  qos_profile_path: :class:`str` or ``None``
        :param qos_profile_path: PolicyPath of associated QoS Profile
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.qos_profile_path = qos_profile_path
        VapiStruct.__init__(self)


PortQosProfileBindingMap._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.port_qos_profile_binding_map', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'qos_profile_path': type.OptionalType(type.StringType()),
    },
    PortQosProfileBindingMap,
    False,
    None))



class PortQosProfileBindingMapListResult(VapiStruct):
    """
    Paged collection of Port QoS Profile Binding Maps

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`PortQosProfileBindingMap` or ``None``
        :param results: Port QoS Profile Binding Map list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


PortQosProfileBindingMapListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.port_qos_profile_binding_map_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PortQosProfileBindingMap'))),
    },
    PortQosProfileBindingMapListResult,
    False,
    None))



class PortSecurityProfileBindingMap(VapiStruct):
    """
    Contains the binding relationship between port and security profile.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'segment_security_profile_path': 'segment_security_profile_path',
                            'spoofguard_profile_path': 'spoofguard_profile_path',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 segment_security_profile_path=None,
                 spoofguard_profile_path=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  segment_security_profile_path: :class:`str` or ``None``
        :param segment_security_profile_path: The policy path of the asscociated Segment Security profile
        :type  spoofguard_profile_path: :class:`str` or ``None``
        :param spoofguard_profile_path: The policy path of the asscociated SpoofGuard profile
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.segment_security_profile_path = segment_security_profile_path
        self.spoofguard_profile_path = spoofguard_profile_path
        VapiStruct.__init__(self)


PortSecurityProfileBindingMap._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.port_security_profile_binding_map', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'segment_security_profile_path': type.OptionalType(type.StringType()),
        'spoofguard_profile_path': type.OptionalType(type.StringType()),
    },
    PortSecurityProfileBindingMap,
    False,
    None))



class PortSecurityProfileBindingMapListResult(VapiStruct):
    """
    Paged collection of port security profile binding maps

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`PortSecurityProfileBindingMap` or ``None``
        :param results: Port security profile binding map list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


PortSecurityProfileBindingMapListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.port_security_profile_binding_map_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PortSecurityProfileBindingMap'))),
    },
    PortSecurityProfileBindingMapListResult,
    False,
    None))



class PrefixEntry(VapiStruct):
    """
    Network prefix entry

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    ACTION_PERMIT = "PERMIT"
    """


    """
    ACTION_DENY = "DENY"
    """


    """



    _canonical_to_pep_names = {
                            'action': 'action',
                            'ge': 'ge',
                            'le': 'le',
                            'network': 'network',
                            }

    def __init__(self,
                 action=None,
                 ge=None,
                 le=None,
                 network=None,
                ):
        """
        :type  action: :class:`str` or ``None``
        :param action: Possible values are: 
            
            * :attr:`PrefixEntry.ACTION_PERMIT`
            * :attr:`PrefixEntry.ACTION_DENY`
            
             Action for the prefix list.
        :type  ge: :class:`long` or ``None``
        :param ge: Prefix length greater than or equal to. format: int32
        :type  le: :class:`long` or ``None``
        :param le: Prefix length less than or equal to. format: int32
        :type  network: :class:`str` or ``None``
        :param network: Network prefix in CIDR format. \"ANY\" matches all networks.
        """
        self.action = action
        self.ge = ge
        self.le = le
        self.network = network
        VapiStruct.__init__(self)


PrefixEntry._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.prefix_entry', {
        'action': type.OptionalType(type.StringType()),
        'ge': type.OptionalType(type.IntegerType()),
        'le': type.OptionalType(type.IntegerType()),
        'network': type.OptionalType(type.StringType()),
    },
    PrefixEntry,
    False,
    None))



class PrefixList(VapiStruct):
    """
    A named list of prefixes for routing purposes.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'prefixes': 'prefixes',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 prefixes=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  prefixes: :class:`list` of :class:`PrefixEntry` or ``None``
        :param prefixes: Specify ordered list of network prefixes.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.prefixes = prefixes
        VapiStruct.__init__(self)


PrefixList._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.prefix_list', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'prefixes': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PrefixEntry'))),
    },
    PrefixList,
    False,
    None))



class PrefixListResult(VapiStruct):
    """
    Paged collection of PrefixLists

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`PrefixList` or ``None``
        :param results: PrefixList results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


PrefixListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.prefix_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PrefixList'))),
    },
    PrefixListResult,
    False,
    None))



class ProfileBindingMap(VapiStruct):
    """
    This entity will be used to establish association between profile and
    policy entities.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'profile_path': 'profile_path',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 profile_path=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  profile_path: :class:`str` or ``None``
        :param profile_path: PolicyPath of associated Profile
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.profile_path = profile_path
        VapiStruct.__init__(self)


ProfileBindingMap._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.profile_binding_map', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'profile_path': type.OptionalType(type.StringType()),
    },
    ProfileBindingMap,
    False,
    None))



class PropertyItem(VapiStruct):
    """
    Represents a label-value pair.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    TYPE_STRING = "String"
    """


    """
    TYPE_NUMBER = "Number"
    """


    """
    TYPE_DATE = "Date"
    """


    """
    TYPE_URL = "Url"
    """


    """



    _canonical_to_pep_names = {
                            'condition': 'condition',
                            'field': 'field',
                            'heading': 'heading',
                            'label': 'label',
                            'navigation': 'navigation',
                            'render_configuration': 'render_configuration',
                            'separator': 'separator',
                            'type': 'type',
                            }

    def __init__(self,
                 condition=None,
                 field=None,
                 heading=None,
                 label=None,
                 navigation=None,
                 render_configuration=None,
                 separator=None,
                 type=None,
                ):
        """
        :type  condition: :class:`str` or ``None``
        :param condition: If the condition is met then the property will be displayed.
            Examples of expression syntax are provided under 'example_request'
            section of 'CreateWidgetConfiguration' API.
        :type  field: :class:`str` or ``None``
        :param field: Represents field value of the property.
        :type  heading: :class:`bool` or ``None``
        :param heading: Set to true if the field is a heading. Default is false.
        :type  label: :class:`Label` or ``None``
        :param label: If a field represents a heading, then label is not needed
        :type  navigation: :class:`str` or ``None``
        :param navigation: Hyperlink of the specified UI page that provides details. This will
            be linked with value of the property.
        :type  render_configuration: :class:`list` of :class:`RenderConfiguration` or ``None``
        :param render_configuration: Render configuration to be applied, if any.
        :type  separator: :class:`bool` or ``None``
        :param separator: If true, separates this property in a widget.
        :type  type: :class:`str` or ``None``
        :param type: Possible values are: 
            
            * :attr:`PropertyItem.TYPE_STRING`
            * :attr:`PropertyItem.TYPE_NUMBER`
            * :attr:`PropertyItem.TYPE_DATE`
            * :attr:`PropertyItem.TYPE_URL`
            
             Data type of the field.
        """
        self.condition = condition
        self.field = field
        self.heading = heading
        self.label = label
        self.navigation = navigation
        self.render_configuration = render_configuration
        self.separator = separator
        self.type = type
        VapiStruct.__init__(self)


PropertyItem._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.property_item', {
        'condition': type.OptionalType(type.StringType()),
        'field': type.OptionalType(type.StringType()),
        'heading': type.OptionalType(type.BooleanType()),
        'label': type.OptionalType(type.ReferenceType(__name__, 'Label')),
        'navigation': type.OptionalType(type.StringType()),
        'render_configuration': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'RenderConfiguration'))),
        'separator': type.OptionalType(type.BooleanType()),
        'type': type.OptionalType(type.StringType()),
    },
    PropertyItem,
    False,
    None))



class QosBaseRateLimiter(VapiStruct):
    """
    A Limiter configuration entry that specifies type and metrics

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "QoSBaseRateLimiter"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    RESOURCE_TYPE_INGRESSRATELIMITER = "IngressRateLimiter"
    """


    """
    RESOURCE_TYPE_INGRESSBROADCASTRATELIMITER = "IngressBroadcastRateLimiter"
    """


    """
    RESOURCE_TYPE_EGRESSRATELIMITER = "EgressRateLimiter"
    """


    """



    _canonical_to_pep_names = {
                            'enabled': 'enabled',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 enabled=None,
                 resource_type='QoSBaseRateLimiter',
                ):
        """
        :type  enabled: :class:`bool` or ``None``
        :param enabled: 
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`QosBaseRateLimiter.RESOURCE_TYPE_INGRESSRATELIMITER`
            *
              :attr:`QosBaseRateLimiter.RESOURCE_TYPE_INGRESSBROADCASTRATELIMITER`
            * :attr:`QosBaseRateLimiter.RESOURCE_TYPE_EGRESSRATELIMITER`
            
             Type rate limiter
        """
        self.enabled = enabled
        self._resource_type = resource_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

QosBaseRateLimiter._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.qos_base_rate_limiter', {
        'enabled': type.OptionalType(type.BooleanType()),
        'resource_type': type.StringType(),
    },
    QosBaseRateLimiter,
    False,
    None))



class QosDscp(VapiStruct):
    """
    Dscp value is ignored in case of 'TRUSTED' DscpTrustMode.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    MODE_TRUSTED = "TRUSTED"
    """


    """
    MODE_UNTRUSTED = "UNTRUSTED"
    """


    """



    _canonical_to_pep_names = {
                            'mode': 'mode',
                            'priority': 'priority',
                            }

    def __init__(self,
                 mode=None,
                 priority=None,
                ):
        """
        :type  mode: :class:`str` or ``None``
        :param mode: Possible values are: 
            
            * :attr:`QosDscp.MODE_TRUSTED`
            * :attr:`QosDscp.MODE_UNTRUSTED`
            
            When you select the Trusted mode the inner header DSCP value is
            applied to the outer IP header for IP/IPv6 traffic. For non IP/IPv6
            traffic, the outer IP header takes the default value.Untrusted mode
            is supported on overlay-based and VLAN-based logical port.
        :type  priority: :class:`long` or ``None``
        :param priority: Internal Forwarding Priority format: int32
        """
        self.mode = mode
        self.priority = priority
        VapiStruct.__init__(self)


QosDscp._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.qos_dscp', {
        'mode': type.OptionalType(type.StringType()),
        'priority': type.OptionalType(type.IntegerType()),
    },
    QosDscp,
    False,
    None))



class QosProfile(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'class_of_service': 'class_of_service',
                            'dscp': 'dscp',
                            'shaper_configurations': 'shaper_configurations',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 class_of_service=None,
                 dscp=None,
                 shaper_configurations=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  class_of_service: :class:`long` or ``None``
        :param class_of_service: Class of service groups similar types of traffic in the network and
            each type of traffic is treated as a class with its own level of
            service priority. The lower priority traffic is slowed down or in
            some cases dropped to provide better throughput for higher priority
            traffic. format: int32
        :type  dscp: :class:`QosDscp` or ``None``
        :param dscp: 
        :type  shaper_configurations: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param shaper_configurations: Array of Rate limiter configurations to applied on Segment or Port.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`QosBaseRateLimiter`. When methods return a value of this
            class as a return value, the attribute will contain all the
            attributes defined in :class:`QosBaseRateLimiter`.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.class_of_service = class_of_service
        self.dscp = dscp
        self.shaper_configurations = shaper_configurations
        VapiStruct.__init__(self)


QosProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.qos_profile', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'class_of_service': type.OptionalType(type.IntegerType()),
        'dscp': type.OptionalType(type.ReferenceType(__name__, 'QosDscp')),
        'shaper_configurations': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'QosBaseRateLimiter')]))),
    },
    QosProfile,
    False,
    None))



class QosProfileBindingMap(VapiStruct):
    """
    Base QoS Profile Binding Map

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        VapiStruct.__init__(self)


QosProfileBindingMap._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.qos_profile_binding_map', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
    },
    QosProfileBindingMap,
    False,
    None))



class QosProfileListResult(VapiStruct):
    """
    Paged collection of QoS profiles

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`QosProfile` or ``None``
        :param results: QoS profiles list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


QosProfileListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.qos_profile_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'QosProfile'))),
    },
    QosProfileListResult,
    False,
    None))



class RAConfig(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'hop_limit': 'hop_limit',
                            'prefix_lifetime': 'prefix_lifetime',
                            'prefix_preferred_time': 'prefix_preferred_time',
                            'ra_interval': 'ra_interval',
                            'router_lifetime': 'router_lifetime',
                            }

    def __init__(self,
                 hop_limit=None,
                 prefix_lifetime=None,
                 prefix_preferred_time=None,
                 ra_interval=None,
                 router_lifetime=None,
                ):
        """
        :type  hop_limit: :class:`long` or ``None``
        :param hop_limit: The maximum number of hops through which packets can pass before
            being discarded. format: int64
        :type  prefix_lifetime: :class:`long` or ``None``
        :param prefix_lifetime: The time interval in seconds, in which the prefix is advertised as
            valid. format: int64
        :type  prefix_preferred_time: :class:`long` or ``None``
        :param prefix_preferred_time: The time interval in seconds, in which the prefix is advertised as
            preferred. format: int64
        :type  ra_interval: :class:`long` or ``None``
        :param ra_interval: Interval between 2 Router advertisement in seconds. format: int64
        :type  router_lifetime: :class:`long` or ``None``
        :param router_lifetime: Router lifetime value in seconds. A value of 0 indicates the router
            is not a default router for the receiving end. Any other value in
            this field specifies the lifetime, in seconds, associated with this
            router as a default router. format: int64
        """
        self.hop_limit = hop_limit
        self.prefix_lifetime = prefix_lifetime
        self.prefix_preferred_time = prefix_preferred_time
        self.ra_interval = ra_interval
        self.router_lifetime = router_lifetime
        VapiStruct.__init__(self)


RAConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.RA_config', {
        'hop_limit': type.OptionalType(type.IntegerType()),
        'prefix_lifetime': type.OptionalType(type.IntegerType()),
        'prefix_preferred_time': type.OptionalType(type.IntegerType()),
        'ra_interval': type.OptionalType(type.IntegerType()),
        'router_lifetime': type.OptionalType(type.IntegerType()),
    },
    RAConfig,
    False,
    None))



class RaDNSConfig(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'dns_server': 'dns_server',
                            'dns_server_lifetime': 'dns_server_lifetime',
                            'domain_name': 'domain_name',
                            'domain_name_lifetime': 'domain_name_lifetime',
                            }

    def __init__(self,
                 dns_server=None,
                 dns_server_lifetime=None,
                 domain_name=None,
                 domain_name_lifetime=None,
                ):
        """
        :type  dns_server: :class:`list` of :class:`str` or ``None``
        :param dns_server: DNS server. format: ipv6
        :type  dns_server_lifetime: :class:`long` or ``None``
        :param dns_server_lifetime: Lifetime of DNS server in milliseconds format: int64
        :type  domain_name: :class:`list` of :class:`str` or ``None``
        :param domain_name: Domain name in RA message.
        :type  domain_name_lifetime: :class:`long` or ``None``
        :param domain_name_lifetime: Lifetime of Domain names in milliseconds format: int64
        """
        self.dns_server = dns_server
        self.dns_server_lifetime = dns_server_lifetime
        self.domain_name = domain_name
        self.domain_name_lifetime = domain_name_lifetime
        VapiStruct.__init__(self)


RaDNSConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ra_DNS_config', {
        'dns_server': type.OptionalType(type.ListType(type.StringType())),
        'dns_server_lifetime': type.OptionalType(type.IntegerType()),
        'domain_name': type.OptionalType(type.ListType(type.StringType())),
        'domain_name_lifetime': type.OptionalType(type.IntegerType()),
    },
    RaDNSConfig,
    False,
    None))



class Reaction(VapiStruct):
    """
    Reaction represents a programmable entity which encapsulates the events and
    the actions in response to the events, or simply \"If This Then That\".

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'actions': 'actions',
                            'events': 'events',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 actions=None,
                 events=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  actions: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param actions: Actions that need to be taken when the events occur. These actions
            must appear in the order that they need to be taken in. This field
            can be interpreted as the HOW of the Reaction, or simply as \"Then
            That\".
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`Action`. When methods return a value of this class as a
            return value, the attribute will contain all the attributes defined
            in :class:`Action`.
        :type  events: :class:`list` of :class:`Event` or ``None``
        :param events: Events that provide contextual variables about what the reaction
            should react to. This field can be interpreted as the WHAT of the
            Reaction, or simply as \"If This\" Clause.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.actions = actions
        self.events = events
        VapiStruct.__init__(self)


Reaction._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.reaction', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'actions': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'Action')]))),
        'events': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Event'))),
    },
    Reaction,
    False,
    None))



class ReactionListResult(VapiStruct):
    """
    Paged Collection of Reactions.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`Reaction` or ``None``
        :param results: Reaction list results.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


ReactionListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.reaction_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Reaction'))),
    },
    ReactionListResult,
    False,
    None))



class RealizedEnforcementPoint(VapiStruct):
    """
    Realized Enforcement Point

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    STATE_UNAVAILABLE = "UNAVAILABLE"
    """


    """
    STATE_UNREALIZED = "UNREALIZED"
    """


    """
    STATE_REALIZED = "REALIZED"
    """


    """
    STATE_ERROR = "ERROR"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'alarms': 'alarms',
                            'intent_reference': 'intent_reference',
                            'realization_api': 'realization_api',
                            'realization_specific_identifier': 'realization_specific_identifier',
                            'runtime_error': 'runtime_error',
                            'runtime_status': 'runtime_status',
                            'state': 'state',
                            'realized_firewalls': 'realized_firewalls',
                            'realized_groups': 'realized_groups',
                            'realized_services': 'realized_services',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 alarms=None,
                 intent_reference=None,
                 realization_api=None,
                 realization_specific_identifier=None,
                 runtime_error=None,
                 runtime_status=None,
                 state=None,
                 realized_firewalls=None,
                 realized_groups=None,
                 realized_services=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  alarms: :class:`list` of :class:`PolicyAlarmResource` or ``None``
        :param alarms: Alarm info detail
        :type  intent_reference: :class:`list` of :class:`str` or ``None``
        :param intent_reference: Desire state paths of this object
        :type  realization_api: :class:`str` or ``None``
        :param realization_api: Realization API of this object on enforcement point
        :type  realization_specific_identifier: :class:`str` or ``None``
        :param realization_specific_identifier: Realization id of this object
        :type  runtime_error: :class:`str` or ``None``
        :param runtime_error: It define the root cause for runtime error.
        :type  runtime_status: :class:`str` or ``None``
        :param runtime_status: Possible values could be UP, DOWN, UNKNOWN, DEGRADED This list is
            not exhaustive.
        :type  state: :class:`str` or ``None``
        :param state: Possible values are: 
            
            * :attr:`RealizedEnforcementPoint.STATE_UNAVAILABLE`
            * :attr:`RealizedEnforcementPoint.STATE_UNREALIZED`
            * :attr:`RealizedEnforcementPoint.STATE_REALIZED`
            * :attr:`RealizedEnforcementPoint.STATE_ERROR`
            
             Realization state of this object
        :type  realized_firewalls: :class:`RealizedFirewalls` or ``None``
        :param realized_firewalls: Root of Realized Firewalls
        :type  realized_groups: :class:`RealizedGroups` or ``None``
        :param realized_groups: Root of Realized Groups
        :type  realized_services: :class:`RealizedServices` or ``None``
        :param realized_services: Root of Realized Services
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.alarms = alarms
        self.intent_reference = intent_reference
        self.realization_api = realization_api
        self.realization_specific_identifier = realization_specific_identifier
        self.runtime_error = runtime_error
        self.runtime_status = runtime_status
        self.state = state
        self.realized_firewalls = realized_firewalls
        self.realized_groups = realized_groups
        self.realized_services = realized_services
        VapiStruct.__init__(self)


RealizedEnforcementPoint._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.realized_enforcement_point', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'alarms': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyAlarmResource'))),
        'intent_reference': type.OptionalType(type.ListType(type.StringType())),
        'realization_api': type.OptionalType(type.StringType()),
        'realization_specific_identifier': type.OptionalType(type.StringType()),
        'runtime_error': type.OptionalType(type.StringType()),
        'runtime_status': type.OptionalType(type.StringType()),
        'state': type.OptionalType(type.StringType()),
        'realized_firewalls': type.OptionalType(type.ReferenceType(__name__, 'RealizedFirewalls')),
        'realized_groups': type.OptionalType(type.ReferenceType(__name__, 'RealizedGroups')),
        'realized_services': type.OptionalType(type.ReferenceType(__name__, 'RealizedServices')),
    },
    RealizedEnforcementPoint,
    False,
    None))



class RealizedEnforcementPointListResult(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`RealizedEnforcementPoint` or ``None``
        :param results: Paged Collection of Enforcement Point's
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


RealizedEnforcementPointListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.realized_enforcement_point_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'RealizedEnforcementPoint'))),
    },
    RealizedEnforcementPointListResult,
    False,
    None))



class RealizedFirewall(VapiStruct):
    """
    Realized firewall

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "RealizedFirewall"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    RESOURCE_TYPE_REALIZEDFIREWALLSECTION = "RealizedFirewallSection"
    """


    """
    STATE_UNAVAILABLE = "UNAVAILABLE"
    """


    """
    STATE_UNREALIZED = "UNREALIZED"
    """


    """
    STATE_REALIZED = "REALIZED"
    """


    """
    STATE_ERROR = "ERROR"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'alarms': 'alarms',
                            'intent_reference': 'intent_reference',
                            'realization_api': 'realization_api',
                            'realization_specific_identifier': 'realization_specific_identifier',
                            'runtime_error': 'runtime_error',
                            'runtime_status': 'runtime_status',
                            'state': 'state',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='RealizedFirewall',
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 alarms=None,
                 intent_reference=None,
                 realization_api=None,
                 realization_specific_identifier=None,
                 runtime_error=None,
                 runtime_status=None,
                 state=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`RealizedFirewall.RESOURCE_TYPE_REALIZEDFIREWALLSECTION`
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  alarms: :class:`list` of :class:`PolicyAlarmResource` or ``None``
        :param alarms: Alarm info detail
        :type  intent_reference: :class:`list` of :class:`str` or ``None``
        :param intent_reference: Desire state paths of this object
        :type  realization_api: :class:`str` or ``None``
        :param realization_api: Realization API of this object on enforcement point
        :type  realization_specific_identifier: :class:`str` or ``None``
        :param realization_specific_identifier: Realization id of this object
        :type  runtime_error: :class:`str` or ``None``
        :param runtime_error: It define the root cause for runtime error.
        :type  runtime_status: :class:`str` or ``None``
        :param runtime_status: Possible values could be UP, DOWN, UNKNOWN, DEGRADED This list is
            not exhaustive.
        :type  state: :class:`str` or ``None``
        :param state: Possible values are: 
            
            * :attr:`RealizedFirewall.STATE_UNAVAILABLE`
            * :attr:`RealizedFirewall.STATE_UNREALIZED`
            * :attr:`RealizedFirewall.STATE_REALIZED`
            * :attr:`RealizedFirewall.STATE_ERROR`
            
             Realization state of this object
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.alarms = alarms
        self.intent_reference = intent_reference
        self.realization_api = realization_api
        self.realization_specific_identifier = realization_specific_identifier
        self.runtime_error = runtime_error
        self.runtime_status = runtime_status
        self.state = state
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

RealizedFirewall._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.realized_firewall', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'alarms': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyAlarmResource'))),
        'intent_reference': type.OptionalType(type.ListType(type.StringType())),
        'realization_api': type.OptionalType(type.StringType()),
        'realization_specific_identifier': type.OptionalType(type.StringType()),
        'runtime_error': type.OptionalType(type.StringType()),
        'runtime_status': type.OptionalType(type.StringType()),
        'state': type.OptionalType(type.StringType()),
    },
    RealizedFirewall,
    False,
    None))



class RealizedFirewallRule(VapiStruct):
    """
    Realized Firewall Rule

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    STATE_UNAVAILABLE = "UNAVAILABLE"
    """


    """
    STATE_UNREALIZED = "UNREALIZED"
    """


    """
    STATE_REALIZED = "REALIZED"
    """


    """
    STATE_ERROR = "ERROR"
    """


    """
    ACTION_ALLOW = "ALLOW"
    """


    """
    ACTION_DROP = "DROP"
    """


    """
    ACTION_REJECT = "REJECT"
    """


    """
    DIRECTION_IN = "IN"
    """


    """
    DIRECTION_OUT = "OUT"
    """


    """
    DIRECTION_IN_OUT = "IN_OUT"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'alarms': 'alarms',
                            'intent_reference': 'intent_reference',
                            'realization_api': 'realization_api',
                            'realization_specific_identifier': 'realization_specific_identifier',
                            'runtime_error': 'runtime_error',
                            'runtime_status': 'runtime_status',
                            'state': 'state',
                            'action': 'action',
                            'destinations': 'destinations',
                            'direction': 'direction',
                            'disabled': 'disabled',
                            'services': 'services',
                            'sources': 'sources',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 alarms=None,
                 intent_reference=None,
                 realization_api=None,
                 realization_specific_identifier=None,
                 runtime_error=None,
                 runtime_status=None,
                 state=None,
                 action=None,
                 destinations=None,
                 direction=None,
                 disabled=None,
                 services=None,
                 sources=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  alarms: :class:`list` of :class:`PolicyAlarmResource` or ``None``
        :param alarms: Alarm info detail
        :type  intent_reference: :class:`list` of :class:`str` or ``None``
        :param intent_reference: Desire state paths of this object
        :type  realization_api: :class:`str` or ``None``
        :param realization_api: Realization API of this object on enforcement point
        :type  realization_specific_identifier: :class:`str` or ``None``
        :param realization_specific_identifier: Realization id of this object
        :type  runtime_error: :class:`str` or ``None``
        :param runtime_error: It define the root cause for runtime error.
        :type  runtime_status: :class:`str` or ``None``
        :param runtime_status: Possible values could be UP, DOWN, UNKNOWN, DEGRADED This list is
            not exhaustive.
        :type  state: :class:`str` or ``None``
        :param state: Possible values are: 
            
            * :attr:`RealizedFirewallRule.STATE_UNAVAILABLE`
            * :attr:`RealizedFirewallRule.STATE_UNREALIZED`
            * :attr:`RealizedFirewallRule.STATE_REALIZED`
            * :attr:`RealizedFirewallRule.STATE_ERROR`
            
             Realization state of this object
        :type  action: :class:`str` or ``None``
        :param action: Possible values are: 
            
            * :attr:`RealizedFirewallRule.ACTION_ALLOW`
            * :attr:`RealizedFirewallRule.ACTION_DROP`
            * :attr:`RealizedFirewallRule.ACTION_REJECT`
            
             Action enforced on the packets which matches the firewall rule.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  destinations: :class:`list` of :class:`ResourceReference` or ``None``
        :param destinations: List of the destinations. Null will be treated as any.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  direction: :class:`str` or ``None``
        :param direction: Possible values are: 
            
            * :attr:`RealizedFirewallRule.DIRECTION_IN`
            * :attr:`RealizedFirewallRule.DIRECTION_OUT`
            * :attr:`RealizedFirewallRule.DIRECTION_IN_OUT`
            
            Rule direction in case of stateless firewall rules. This will only
            considered if section level parameter is set to stateless. Default
            to IN_OUT if not specified.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  disabled: :class:`bool` or ``None``
        :param disabled: Flag to disable rule. Disabled will only be persisted but never
            provisioned/realized.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  services: :class:`list` of :class:`ResourceReference` or ``None``
        :param services: List of the services. Null will be treated as any.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sources: :class:`list` of :class:`ResourceReference` or ``None``
        :param sources: List of sources. Null will be treated as any.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.alarms = alarms
        self.intent_reference = intent_reference
        self.realization_api = realization_api
        self.realization_specific_identifier = realization_specific_identifier
        self.runtime_error = runtime_error
        self.runtime_status = runtime_status
        self.state = state
        self.action = action
        self.destinations = destinations
        self.direction = direction
        self.disabled = disabled
        self.services = services
        self.sources = sources
        VapiStruct.__init__(self)


RealizedFirewallRule._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.realized_firewall_rule', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'alarms': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyAlarmResource'))),
        'intent_reference': type.OptionalType(type.ListType(type.StringType())),
        'realization_api': type.OptionalType(type.StringType()),
        'realization_specific_identifier': type.OptionalType(type.StringType()),
        'runtime_error': type.OptionalType(type.StringType()),
        'runtime_status': type.OptionalType(type.StringType()),
        'state': type.OptionalType(type.StringType()),
        'action': type.OptionalType(type.StringType()),
        'destinations': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceReference'))),
        'direction': type.OptionalType(type.StringType()),
        'disabled': type.OptionalType(type.BooleanType()),
        'services': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceReference'))),
        'sources': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceReference'))),
    },
    RealizedFirewallRule,
    False,
    None))



class RealizedFirewallSection(VapiStruct):
    """
    Realized Firewall section

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "RealizedFirewallSection"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    SECTION_TYPE_LAYER2 = "LAYER2"
    """


    """
    SECTION_TYPE_LAYER3 = "LAYER3"
    """


    """



    _canonical_to_pep_names = {
                            'rule_count': 'rule_count',
                            'rules': 'rules',
                            'section_type': 'section_type',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'alarms': 'alarms',
                            'intent_reference': 'intent_reference',
                            'realization_api': 'realization_api',
                            'realization_specific_identifier': 'realization_specific_identifier',
                            'runtime_error': 'runtime_error',
                            'runtime_status': 'runtime_status',
                            'state': 'state',
                            }

    def __init__(self,
                 rule_count=None,
                 rules=None,
                 section_type=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='RealizedFirewallSection',
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 alarms=None,
                 intent_reference=None,
                 realization_api=None,
                 realization_specific_identifier=None,
                 runtime_error=None,
                 runtime_status=None,
                 state=None,
                ):
        """
        :type  rule_count: :class:`long` or ``None``
        :param rule_count: Number of rules in this section. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  rules: :class:`list` of :class:`RealizedFirewallRule` or ``None``
        :param rules: List of firewall rules in the section.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  section_type: :class:`str` or ``None``
        :param section_type: Possible values are: 
            
            * :attr:`RealizedFirewallSection.SECTION_TYPE_LAYER2`
            * :attr:`RealizedFirewallSection.SECTION_TYPE_LAYER3`
            
             Type of the rules which a section can contain.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`RealizedFirewall.RESOURCE_TYPE_REALIZEDFIREWALLSECTION`
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  alarms: :class:`list` of :class:`PolicyAlarmResource` or ``None``
        :param alarms: Alarm info detail
        :type  intent_reference: :class:`list` of :class:`str` or ``None``
        :param intent_reference: Desire state paths of this object
        :type  realization_api: :class:`str` or ``None``
        :param realization_api: Realization API of this object on enforcement point
        :type  realization_specific_identifier: :class:`str` or ``None``
        :param realization_specific_identifier: Realization id of this object
        :type  runtime_error: :class:`str` or ``None``
        :param runtime_error: It define the root cause for runtime error.
        :type  runtime_status: :class:`str` or ``None``
        :param runtime_status: Possible values could be UP, DOWN, UNKNOWN, DEGRADED This list is
            not exhaustive.
        :type  state: :class:`str` or ``None``
        :param state: Possible values are: 
            
            * :attr:`RealizedFirewall.STATE_UNAVAILABLE`
            * :attr:`RealizedFirewall.STATE_UNREALIZED`
            * :attr:`RealizedFirewall.STATE_REALIZED`
            * :attr:`RealizedFirewall.STATE_ERROR`
            
             Realization state of this object
        """
        self.rule_count = rule_count
        self.rules = rules
        self.section_type = section_type
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.alarms = alarms
        self.intent_reference = intent_reference
        self.realization_api = realization_api
        self.realization_specific_identifier = realization_specific_identifier
        self.runtime_error = runtime_error
        self.runtime_status = runtime_status
        self.state = state
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

RealizedFirewallSection._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.realized_firewall_section', {
        'rule_count': type.OptionalType(type.IntegerType()),
        'rules': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'RealizedFirewallRule'))),
        'section_type': type.OptionalType(type.StringType()),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'alarms': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyAlarmResource'))),
        'intent_reference': type.OptionalType(type.ListType(type.StringType())),
        'realization_api': type.OptionalType(type.StringType()),
        'realization_specific_identifier': type.OptionalType(type.StringType()),
        'runtime_error': type.OptionalType(type.StringType()),
        'runtime_status': type.OptionalType(type.StringType()),
        'state': type.OptionalType(type.StringType()),
    },
    RealizedFirewallSection,
    False,
    None))



class RealizedFirewallSectionListResult(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`RealizedFirewallSection` or ``None``
        :param results: Paged Collection of firewall sections
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


RealizedFirewallSectionListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.realized_firewall_section_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'RealizedFirewallSection'))),
    },
    RealizedFirewallSectionListResult,
    False,
    None))



class RealizedFirewalls(VapiStruct):
    """
    Realized firewalls

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    STATE_UNAVAILABLE = "UNAVAILABLE"
    """


    """
    STATE_UNREALIZED = "UNREALIZED"
    """


    """
    STATE_REALIZED = "REALIZED"
    """


    """
    STATE_ERROR = "ERROR"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'alarms': 'alarms',
                            'intent_reference': 'intent_reference',
                            'realization_api': 'realization_api',
                            'realization_specific_identifier': 'realization_specific_identifier',
                            'runtime_error': 'runtime_error',
                            'runtime_status': 'runtime_status',
                            'state': 'state',
                            'realized_firewalls': 'realized_firewalls',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 alarms=None,
                 intent_reference=None,
                 realization_api=None,
                 realization_specific_identifier=None,
                 runtime_error=None,
                 runtime_status=None,
                 state=None,
                 realized_firewalls=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  alarms: :class:`list` of :class:`PolicyAlarmResource` or ``None``
        :param alarms: Alarm info detail
        :type  intent_reference: :class:`list` of :class:`str` or ``None``
        :param intent_reference: Desire state paths of this object
        :type  realization_api: :class:`str` or ``None``
        :param realization_api: Realization API of this object on enforcement point
        :type  realization_specific_identifier: :class:`str` or ``None``
        :param realization_specific_identifier: Realization id of this object
        :type  runtime_error: :class:`str` or ``None``
        :param runtime_error: It define the root cause for runtime error.
        :type  runtime_status: :class:`str` or ``None``
        :param runtime_status: Possible values could be UP, DOWN, UNKNOWN, DEGRADED This list is
            not exhaustive.
        :type  state: :class:`str` or ``None``
        :param state: Possible values are: 
            
            * :attr:`RealizedFirewalls.STATE_UNAVAILABLE`
            * :attr:`RealizedFirewalls.STATE_UNREALIZED`
            * :attr:`RealizedFirewalls.STATE_REALIZED`
            * :attr:`RealizedFirewalls.STATE_ERROR`
            
             Realization state of this object
        :type  realized_firewalls: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param realized_firewalls: list of realized firewalls
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`RealizedFirewall`. When methods return a value of this
            class as a return value, the attribute will contain all the
            attributes defined in :class:`RealizedFirewall`.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.alarms = alarms
        self.intent_reference = intent_reference
        self.realization_api = realization_api
        self.realization_specific_identifier = realization_specific_identifier
        self.runtime_error = runtime_error
        self.runtime_status = runtime_status
        self.state = state
        self.realized_firewalls = realized_firewalls
        VapiStruct.__init__(self)


RealizedFirewalls._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.realized_firewalls', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'alarms': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyAlarmResource'))),
        'intent_reference': type.OptionalType(type.ListType(type.StringType())),
        'realization_api': type.OptionalType(type.StringType()),
        'realization_specific_identifier': type.OptionalType(type.StringType()),
        'runtime_error': type.OptionalType(type.StringType()),
        'runtime_status': type.OptionalType(type.StringType()),
        'state': type.OptionalType(type.StringType()),
        'realized_firewalls': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'RealizedFirewall')]))),
    },
    RealizedFirewalls,
    False,
    None))



class RealizedGroup(VapiStruct):
    """
    Realized group

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "RealizedGroup"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    RESOURCE_TYPE_REALIZEDNSGROUP = "RealizedNSGroup"
    """


    """
    RESOURCE_TYPE_REALIZEDSECURITYGROUP = "RealizedSecurityGroup"
    """


    """
    STATE_UNAVAILABLE = "UNAVAILABLE"
    """


    """
    STATE_UNREALIZED = "UNREALIZED"
    """


    """
    STATE_REALIZED = "REALIZED"
    """


    """
    STATE_ERROR = "ERROR"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'alarms': 'alarms',
                            'intent_reference': 'intent_reference',
                            'realization_api': 'realization_api',
                            'realization_specific_identifier': 'realization_specific_identifier',
                            'runtime_error': 'runtime_error',
                            'runtime_status': 'runtime_status',
                            'state': 'state',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='RealizedGroup',
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 alarms=None,
                 intent_reference=None,
                 realization_api=None,
                 realization_specific_identifier=None,
                 runtime_error=None,
                 runtime_status=None,
                 state=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`RealizedGroup.RESOURCE_TYPE_REALIZEDNSGROUP`
            * :attr:`RealizedGroup.RESOURCE_TYPE_REALIZEDSECURITYGROUP`
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  alarms: :class:`list` of :class:`PolicyAlarmResource` or ``None``
        :param alarms: Alarm info detail
        :type  intent_reference: :class:`list` of :class:`str` or ``None``
        :param intent_reference: Desire state paths of this object
        :type  realization_api: :class:`str` or ``None``
        :param realization_api: Realization API of this object on enforcement point
        :type  realization_specific_identifier: :class:`str` or ``None``
        :param realization_specific_identifier: Realization id of this object
        :type  runtime_error: :class:`str` or ``None``
        :param runtime_error: It define the root cause for runtime error.
        :type  runtime_status: :class:`str` or ``None``
        :param runtime_status: Possible values could be UP, DOWN, UNKNOWN, DEGRADED This list is
            not exhaustive.
        :type  state: :class:`str` or ``None``
        :param state: Possible values are: 
            
            * :attr:`RealizedGroup.STATE_UNAVAILABLE`
            * :attr:`RealizedGroup.STATE_UNREALIZED`
            * :attr:`RealizedGroup.STATE_REALIZED`
            * :attr:`RealizedGroup.STATE_ERROR`
            
             Realization state of this object
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.alarms = alarms
        self.intent_reference = intent_reference
        self.realization_api = realization_api
        self.realization_specific_identifier = realization_specific_identifier
        self.runtime_error = runtime_error
        self.runtime_status = runtime_status
        self.state = state
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

RealizedGroup._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.realized_group', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'alarms': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyAlarmResource'))),
        'intent_reference': type.OptionalType(type.ListType(type.StringType())),
        'realization_api': type.OptionalType(type.StringType()),
        'realization_specific_identifier': type.OptionalType(type.StringType()),
        'runtime_error': type.OptionalType(type.StringType()),
        'runtime_status': type.OptionalType(type.StringType()),
        'state': type.OptionalType(type.StringType()),
    },
    RealizedGroup,
    False,
    None))



class RealizedGroups(VapiStruct):
    """
    Realized groups

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    STATE_UNAVAILABLE = "UNAVAILABLE"
    """


    """
    STATE_UNREALIZED = "UNREALIZED"
    """


    """
    STATE_REALIZED = "REALIZED"
    """


    """
    STATE_ERROR = "ERROR"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'alarms': 'alarms',
                            'intent_reference': 'intent_reference',
                            'realization_api': 'realization_api',
                            'realization_specific_identifier': 'realization_specific_identifier',
                            'runtime_error': 'runtime_error',
                            'runtime_status': 'runtime_status',
                            'state': 'state',
                            'realized_groups': 'realized_groups',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 alarms=None,
                 intent_reference=None,
                 realization_api=None,
                 realization_specific_identifier=None,
                 runtime_error=None,
                 runtime_status=None,
                 state=None,
                 realized_groups=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  alarms: :class:`list` of :class:`PolicyAlarmResource` or ``None``
        :param alarms: Alarm info detail
        :type  intent_reference: :class:`list` of :class:`str` or ``None``
        :param intent_reference: Desire state paths of this object
        :type  realization_api: :class:`str` or ``None``
        :param realization_api: Realization API of this object on enforcement point
        :type  realization_specific_identifier: :class:`str` or ``None``
        :param realization_specific_identifier: Realization id of this object
        :type  runtime_error: :class:`str` or ``None``
        :param runtime_error: It define the root cause for runtime error.
        :type  runtime_status: :class:`str` or ``None``
        :param runtime_status: Possible values could be UP, DOWN, UNKNOWN, DEGRADED This list is
            not exhaustive.
        :type  state: :class:`str` or ``None``
        :param state: Possible values are: 
            
            * :attr:`RealizedGroups.STATE_UNAVAILABLE`
            * :attr:`RealizedGroups.STATE_UNREALIZED`
            * :attr:`RealizedGroups.STATE_REALIZED`
            * :attr:`RealizedGroups.STATE_ERROR`
            
             Realization state of this object
        :type  realized_groups: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param realized_groups: list of realized groups
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`RealizedGroup`. When methods return a value of this class
            as a return value, the attribute will contain all the attributes
            defined in :class:`RealizedGroup`.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.alarms = alarms
        self.intent_reference = intent_reference
        self.realization_api = realization_api
        self.realization_specific_identifier = realization_specific_identifier
        self.runtime_error = runtime_error
        self.runtime_status = runtime_status
        self.state = state
        self.realized_groups = realized_groups
        VapiStruct.__init__(self)


RealizedGroups._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.realized_groups', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'alarms': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyAlarmResource'))),
        'intent_reference': type.OptionalType(type.ListType(type.StringType())),
        'realization_api': type.OptionalType(type.StringType()),
        'realization_specific_identifier': type.OptionalType(type.StringType()),
        'runtime_error': type.OptionalType(type.StringType()),
        'runtime_status': type.OptionalType(type.StringType()),
        'state': type.OptionalType(type.StringType()),
        'realized_groups': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'RealizedGroup')]))),
    },
    RealizedGroups,
    False,
    None))



class RealizedLogicalPort(VapiStruct):
    """
    Realized Logical Port

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    STATE_UNAVAILABLE = "UNAVAILABLE"
    """


    """
    STATE_UNREALIZED = "UNREALIZED"
    """


    """
    STATE_REALIZED = "REALIZED"
    """


    """
    STATE_ERROR = "ERROR"
    """


    """
    STATUS_UP = "UP"
    """


    """
    STATUS_DOWN = "DOWN"
    """


    """
    STATUS_UNKNOWN = "UNKNOWN"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'alarms': 'alarms',
                            'intent_reference': 'intent_reference',
                            'realization_api': 'realization_api',
                            'realization_specific_identifier': 'realization_specific_identifier',
                            'runtime_error': 'runtime_error',
                            'runtime_status': 'runtime_status',
                            'state': 'state',
                            'logical_port_id': 'logical_port_id',
                            'status': 'status',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 alarms=None,
                 intent_reference=None,
                 realization_api=None,
                 realization_specific_identifier=None,
                 runtime_error=None,
                 runtime_status=None,
                 state=None,
                 logical_port_id=None,
                 status=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  alarms: :class:`list` of :class:`PolicyAlarmResource` or ``None``
        :param alarms: Alarm info detail
        :type  intent_reference: :class:`list` of :class:`str` or ``None``
        :param intent_reference: Desire state paths of this object
        :type  realization_api: :class:`str` or ``None``
        :param realization_api: Realization API of this object on enforcement point
        :type  realization_specific_identifier: :class:`str` or ``None``
        :param realization_specific_identifier: Realization id of this object
        :type  runtime_error: :class:`str` or ``None``
        :param runtime_error: It define the root cause for runtime error.
        :type  runtime_status: :class:`str` or ``None``
        :param runtime_status: Possible values could be UP, DOWN, UNKNOWN, DEGRADED This list is
            not exhaustive.
        :type  state: :class:`str` or ``None``
        :param state: Possible values are: 
            
            * :attr:`RealizedLogicalPort.STATE_UNAVAILABLE`
            * :attr:`RealizedLogicalPort.STATE_UNREALIZED`
            * :attr:`RealizedLogicalPort.STATE_REALIZED`
            * :attr:`RealizedLogicalPort.STATE_ERROR`
            
             Realization state of this object
        :type  logical_port_id: :class:`str` or ``None``
        :param logical_port_id: The id of the logical port
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  status: :class:`str` or ``None``
        :param status: Possible values are: 
            
            * :attr:`RealizedLogicalPort.STATUS_UP`
            * :attr:`RealizedLogicalPort.STATUS_DOWN`
            * :attr:`RealizedLogicalPort.STATUS_UNKNOWN`
            
             The Operational status of the logical port
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.alarms = alarms
        self.intent_reference = intent_reference
        self.realization_api = realization_api
        self.realization_specific_identifier = realization_specific_identifier
        self.runtime_error = runtime_error
        self.runtime_status = runtime_status
        self.state = state
        self.logical_port_id = logical_port_id
        self.status = status
        VapiStruct.__init__(self)


RealizedLogicalPort._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.realized_logical_port', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'alarms': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyAlarmResource'))),
        'intent_reference': type.OptionalType(type.ListType(type.StringType())),
        'realization_api': type.OptionalType(type.StringType()),
        'realization_specific_identifier': type.OptionalType(type.StringType()),
        'runtime_error': type.OptionalType(type.StringType()),
        'runtime_status': type.OptionalType(type.StringType()),
        'state': type.OptionalType(type.StringType()),
        'logical_port_id': type.OptionalType(type.StringType()),
        'status': type.OptionalType(type.StringType()),
    },
    RealizedLogicalPort,
    False,
    None))



class RealizedLogicalSwitch(VapiStruct):
    """
    Realized Logical Switch

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    STATE_UNAVAILABLE = "UNAVAILABLE"
    """


    """
    STATE_UNREALIZED = "UNREALIZED"
    """


    """
    STATE_REALIZED = "REALIZED"
    """


    """
    STATE_ERROR = "ERROR"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'alarms': 'alarms',
                            'intent_reference': 'intent_reference',
                            'realization_api': 'realization_api',
                            'realization_specific_identifier': 'realization_specific_identifier',
                            'runtime_error': 'runtime_error',
                            'runtime_status': 'runtime_status',
                            'state': 'state',
                            'logical_switch_id': 'logical_switch_id',
                            'transport_zone_id': 'transport_zone_id',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 alarms=None,
                 intent_reference=None,
                 realization_api=None,
                 realization_specific_identifier=None,
                 runtime_error=None,
                 runtime_status=None,
                 state=None,
                 logical_switch_id=None,
                 transport_zone_id=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  alarms: :class:`list` of :class:`PolicyAlarmResource` or ``None``
        :param alarms: Alarm info detail
        :type  intent_reference: :class:`list` of :class:`str` or ``None``
        :param intent_reference: Desire state paths of this object
        :type  realization_api: :class:`str` or ``None``
        :param realization_api: Realization API of this object on enforcement point
        :type  realization_specific_identifier: :class:`str` or ``None``
        :param realization_specific_identifier: Realization id of this object
        :type  runtime_error: :class:`str` or ``None``
        :param runtime_error: It define the root cause for runtime error.
        :type  runtime_status: :class:`str` or ``None``
        :param runtime_status: Possible values could be UP, DOWN, UNKNOWN, DEGRADED This list is
            not exhaustive.
        :type  state: :class:`str` or ``None``
        :param state: Possible values are: 
            
            * :attr:`RealizedLogicalSwitch.STATE_UNAVAILABLE`
            * :attr:`RealizedLogicalSwitch.STATE_UNREALIZED`
            * :attr:`RealizedLogicalSwitch.STATE_REALIZED`
            * :attr:`RealizedLogicalSwitch.STATE_ERROR`
            
             Realization state of this object
        :type  logical_switch_id: :class:`str` or ``None``
        :param logical_switch_id: Id of the logical switch
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  transport_zone_id: :class:`str` or ``None``
        :param transport_zone_id: Transport zone identifier
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.alarms = alarms
        self.intent_reference = intent_reference
        self.realization_api = realization_api
        self.realization_specific_identifier = realization_specific_identifier
        self.runtime_error = runtime_error
        self.runtime_status = runtime_status
        self.state = state
        self.logical_switch_id = logical_switch_id
        self.transport_zone_id = transport_zone_id
        VapiStruct.__init__(self)


RealizedLogicalSwitch._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.realized_logical_switch', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'alarms': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyAlarmResource'))),
        'intent_reference': type.OptionalType(type.ListType(type.StringType())),
        'realization_api': type.OptionalType(type.StringType()),
        'realization_specific_identifier': type.OptionalType(type.StringType()),
        'runtime_error': type.OptionalType(type.StringType()),
        'runtime_status': type.OptionalType(type.StringType()),
        'state': type.OptionalType(type.StringType()),
        'logical_switch_id': type.OptionalType(type.StringType()),
        'transport_zone_id': type.OptionalType(type.StringType()),
    },
    RealizedLogicalSwitch,
    False,
    None))



class RealizedNSGroup(VapiStruct):
    """
    Realized Network and Security Group

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "RealizedNSGroup"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'evaluations': 'evaluations',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'alarms': 'alarms',
                            'intent_reference': 'intent_reference',
                            'realization_api': 'realization_api',
                            'realization_specific_identifier': 'realization_specific_identifier',
                            'runtime_error': 'runtime_error',
                            'runtime_status': 'runtime_status',
                            'state': 'state',
                            }

    def __init__(self,
                 evaluations=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='RealizedNSGroup',
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 alarms=None,
                 intent_reference=None,
                 realization_api=None,
                 realization_specific_identifier=None,
                 runtime_error=None,
                 runtime_status=None,
                 state=None,
                ):
        """
        :type  evaluations: :class:`list` of :class:`RealizedNSGroupMemberEvaluation` or ``None``
        :param evaluations: Reference to the evaluated members of the NSGroup.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`RealizedGroup.RESOURCE_TYPE_REALIZEDNSGROUP`
            * :attr:`RealizedGroup.RESOURCE_TYPE_REALIZEDSECURITYGROUP`
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  alarms: :class:`list` of :class:`PolicyAlarmResource` or ``None``
        :param alarms: Alarm info detail
        :type  intent_reference: :class:`list` of :class:`str` or ``None``
        :param intent_reference: Desire state paths of this object
        :type  realization_api: :class:`str` or ``None``
        :param realization_api: Realization API of this object on enforcement point
        :type  realization_specific_identifier: :class:`str` or ``None``
        :param realization_specific_identifier: Realization id of this object
        :type  runtime_error: :class:`str` or ``None``
        :param runtime_error: It define the root cause for runtime error.
        :type  runtime_status: :class:`str` or ``None``
        :param runtime_status: Possible values could be UP, DOWN, UNKNOWN, DEGRADED This list is
            not exhaustive.
        :type  state: :class:`str` or ``None``
        :param state: Possible values are: 
            
            * :attr:`RealizedGroup.STATE_UNAVAILABLE`
            * :attr:`RealizedGroup.STATE_UNREALIZED`
            * :attr:`RealizedGroup.STATE_REALIZED`
            * :attr:`RealizedGroup.STATE_ERROR`
            
             Realization state of this object
        """
        self.evaluations = evaluations
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.alarms = alarms
        self.intent_reference = intent_reference
        self.realization_api = realization_api
        self.realization_specific_identifier = realization_specific_identifier
        self.runtime_error = runtime_error
        self.runtime_status = runtime_status
        self.state = state
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

RealizedNSGroup._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.realized_NS_group', {
        'evaluations': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'RealizedNSGroupMemberEvaluation'))),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'alarms': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyAlarmResource'))),
        'intent_reference': type.OptionalType(type.ListType(type.StringType())),
        'realization_api': type.OptionalType(type.StringType()),
        'realization_specific_identifier': type.OptionalType(type.StringType()),
        'runtime_error': type.OptionalType(type.StringType()),
        'runtime_status': type.OptionalType(type.StringType()),
        'state': type.OptionalType(type.StringType()),
    },
    RealizedNSGroup,
    False,
    None))



class RealizedNSGroupMemberEvaluation(VapiStruct):
    """
    Realized NSGroup member evaluation

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    STATE_UNAVAILABLE = "UNAVAILABLE"
    """


    """
    STATE_UNREALIZED = "UNREALIZED"
    """


    """
    STATE_REALIZED = "REALIZED"
    """


    """
    STATE_ERROR = "ERROR"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'alarms': 'alarms',
                            'intent_reference': 'intent_reference',
                            'realization_api': 'realization_api',
                            'realization_specific_identifier': 'realization_specific_identifier',
                            'runtime_error': 'runtime_error',
                            'runtime_status': 'runtime_status',
                            'state': 'state',
                            'logical_ports': 'logical_ports',
                            'logical_switches': 'logical_switches',
                            'member_count': 'member_count',
                            'virtual_machines': 'virtual_machines',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 alarms=None,
                 intent_reference=None,
                 realization_api=None,
                 realization_specific_identifier=None,
                 runtime_error=None,
                 runtime_status=None,
                 state=None,
                 logical_ports=None,
                 logical_switches=None,
                 member_count=None,
                 virtual_machines=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  alarms: :class:`list` of :class:`PolicyAlarmResource` or ``None``
        :param alarms: Alarm info detail
        :type  intent_reference: :class:`list` of :class:`str` or ``None``
        :param intent_reference: Desire state paths of this object
        :type  realization_api: :class:`str` or ``None``
        :param realization_api: Realization API of this object on enforcement point
        :type  realization_specific_identifier: :class:`str` or ``None``
        :param realization_specific_identifier: Realization id of this object
        :type  runtime_error: :class:`str` or ``None``
        :param runtime_error: It define the root cause for runtime error.
        :type  runtime_status: :class:`str` or ``None``
        :param runtime_status: Possible values could be UP, DOWN, UNKNOWN, DEGRADED This list is
            not exhaustive.
        :type  state: :class:`str` or ``None``
        :param state: Possible values are: 
            
            * :attr:`RealizedNSGroupMemberEvaluation.STATE_UNAVAILABLE`
            * :attr:`RealizedNSGroupMemberEvaluation.STATE_UNREALIZED`
            * :attr:`RealizedNSGroupMemberEvaluation.STATE_REALIZED`
            * :attr:`RealizedNSGroupMemberEvaluation.STATE_ERROR`
            
             Realization state of this object
        :type  logical_ports: :class:`list` of :class:`RealizedLogicalPort` or ``None``
        :param logical_ports: list of logical ports
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  logical_switches: :class:`list` of :class:`RealizedLogicalSwitch` or ``None``
        :param logical_switches: list of logical switches
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  member_count: :class:`long` or ``None``
        :param member_count: Count of the members added to this NSGroup format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  virtual_machines: :class:`list` of :class:`RealizedVirtualMachine` or ``None``
        :param virtual_machines: list of virtual machines
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.alarms = alarms
        self.intent_reference = intent_reference
        self.realization_api = realization_api
        self.realization_specific_identifier = realization_specific_identifier
        self.runtime_error = runtime_error
        self.runtime_status = runtime_status
        self.state = state
        self.logical_ports = logical_ports
        self.logical_switches = logical_switches
        self.member_count = member_count
        self.virtual_machines = virtual_machines
        VapiStruct.__init__(self)


RealizedNSGroupMemberEvaluation._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.realized_NS_group_member_evaluation', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'alarms': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyAlarmResource'))),
        'intent_reference': type.OptionalType(type.ListType(type.StringType())),
        'realization_api': type.OptionalType(type.StringType()),
        'realization_specific_identifier': type.OptionalType(type.StringType()),
        'runtime_error': type.OptionalType(type.StringType()),
        'runtime_status': type.OptionalType(type.StringType()),
        'state': type.OptionalType(type.StringType()),
        'logical_ports': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'RealizedLogicalPort'))),
        'logical_switches': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'RealizedLogicalSwitch'))),
        'member_count': type.OptionalType(type.IntegerType()),
        'virtual_machines': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'RealizedVirtualMachine'))),
    },
    RealizedNSGroupMemberEvaluation,
    False,
    None))



class RealizedNSService(VapiStruct):
    """
    Realized NSService

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "RealizedNSService"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    SERVICE_TYPE_SERVICE = "SERVICE"
    """


    """
    SERVICE_TYPE_SERVICE_GROUP = "SERVICE_GROUP"
    """


    """



    _canonical_to_pep_names = {
                            'service_type': 'service_type',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'alarms': 'alarms',
                            'intent_reference': 'intent_reference',
                            'realization_api': 'realization_api',
                            'realization_specific_identifier': 'realization_specific_identifier',
                            'runtime_error': 'runtime_error',
                            'runtime_status': 'runtime_status',
                            'state': 'state',
                            }

    def __init__(self,
                 service_type=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='RealizedNSService',
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 alarms=None,
                 intent_reference=None,
                 realization_api=None,
                 realization_specific_identifier=None,
                 runtime_error=None,
                 runtime_status=None,
                 state=None,
                ):
        """
        :type  service_type: :class:`str` or ``None``
        :param service_type: Possible values are: 
            
            * :attr:`RealizedNSService.SERVICE_TYPE_SERVICE`
            * :attr:`RealizedNSService.SERVICE_TYPE_SERVICE_GROUP`
            
             Realized nsservice type
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`RealizedService.RESOURCE_TYPE_REALIZEDNSSERVICE`
            
             Realized services
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  alarms: :class:`list` of :class:`PolicyAlarmResource` or ``None``
        :param alarms: Alarm info detail
        :type  intent_reference: :class:`list` of :class:`str` or ``None``
        :param intent_reference: Desire state paths of this object
        :type  realization_api: :class:`str` or ``None``
        :param realization_api: Realization API of this object on enforcement point
        :type  realization_specific_identifier: :class:`str` or ``None``
        :param realization_specific_identifier: Realization id of this object
        :type  runtime_error: :class:`str` or ``None``
        :param runtime_error: It define the root cause for runtime error.
        :type  runtime_status: :class:`str` or ``None``
        :param runtime_status: Possible values could be UP, DOWN, UNKNOWN, DEGRADED This list is
            not exhaustive.
        :type  state: :class:`str` or ``None``
        :param state: Possible values are: 
            
            * :attr:`RealizedService.STATE_UNAVAILABLE`
            * :attr:`RealizedService.STATE_UNREALIZED`
            * :attr:`RealizedService.STATE_REALIZED`
            * :attr:`RealizedService.STATE_ERROR`
            
             Realization state of this object
        """
        self.service_type = service_type
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.alarms = alarms
        self.intent_reference = intent_reference
        self.realization_api = realization_api
        self.realization_specific_identifier = realization_specific_identifier
        self.runtime_error = runtime_error
        self.runtime_status = runtime_status
        self.state = state
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

RealizedNSService._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.realized_NS_service', {
        'service_type': type.OptionalType(type.StringType()),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'alarms': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyAlarmResource'))),
        'intent_reference': type.OptionalType(type.ListType(type.StringType())),
        'realization_api': type.OptionalType(type.StringType()),
        'realization_specific_identifier': type.OptionalType(type.StringType()),
        'runtime_error': type.OptionalType(type.StringType()),
        'runtime_status': type.OptionalType(type.StringType()),
        'state': type.OptionalType(type.StringType()),
    },
    RealizedNSService,
    False,
    None))



class RealizedSecurityGroup(VapiStruct):
    """
    Realized Network and Security Group

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "RealizedSecurityGroup"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'evaluations': 'evaluations',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'alarms': 'alarms',
                            'intent_reference': 'intent_reference',
                            'realization_api': 'realization_api',
                            'realization_specific_identifier': 'realization_specific_identifier',
                            'runtime_error': 'runtime_error',
                            'runtime_status': 'runtime_status',
                            'state': 'state',
                            }

    def __init__(self,
                 evaluations=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='RealizedSecurityGroup',
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 alarms=None,
                 intent_reference=None,
                 realization_api=None,
                 realization_specific_identifier=None,
                 runtime_error=None,
                 runtime_status=None,
                 state=None,
                ):
        """
        :type  evaluations: :class:`list` of :class:`RealizedSecurityGroupMemberEvaluation` or ``None``
        :param evaluations: Reference to the evaluted members of the Security Group.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`RealizedGroup.RESOURCE_TYPE_REALIZEDNSGROUP`
            * :attr:`RealizedGroup.RESOURCE_TYPE_REALIZEDSECURITYGROUP`
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  alarms: :class:`list` of :class:`PolicyAlarmResource` or ``None``
        :param alarms: Alarm info detail
        :type  intent_reference: :class:`list` of :class:`str` or ``None``
        :param intent_reference: Desire state paths of this object
        :type  realization_api: :class:`str` or ``None``
        :param realization_api: Realization API of this object on enforcement point
        :type  realization_specific_identifier: :class:`str` or ``None``
        :param realization_specific_identifier: Realization id of this object
        :type  runtime_error: :class:`str` or ``None``
        :param runtime_error: It define the root cause for runtime error.
        :type  runtime_status: :class:`str` or ``None``
        :param runtime_status: Possible values could be UP, DOWN, UNKNOWN, DEGRADED This list is
            not exhaustive.
        :type  state: :class:`str` or ``None``
        :param state: Possible values are: 
            
            * :attr:`RealizedGroup.STATE_UNAVAILABLE`
            * :attr:`RealizedGroup.STATE_UNREALIZED`
            * :attr:`RealizedGroup.STATE_REALIZED`
            * :attr:`RealizedGroup.STATE_ERROR`
            
             Realization state of this object
        """
        self.evaluations = evaluations
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.alarms = alarms
        self.intent_reference = intent_reference
        self.realization_api = realization_api
        self.realization_specific_identifier = realization_specific_identifier
        self.runtime_error = runtime_error
        self.runtime_status = runtime_status
        self.state = state
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

RealizedSecurityGroup._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.realized_security_group', {
        'evaluations': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'RealizedSecurityGroupMemberEvaluation'))),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'alarms': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyAlarmResource'))),
        'intent_reference': type.OptionalType(type.ListType(type.StringType())),
        'realization_api': type.OptionalType(type.StringType()),
        'realization_specific_identifier': type.OptionalType(type.StringType()),
        'runtime_error': type.OptionalType(type.StringType()),
        'runtime_status': type.OptionalType(type.StringType()),
        'state': type.OptionalType(type.StringType()),
    },
    RealizedSecurityGroup,
    False,
    None))



class RealizedSecurityGroupListResult(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`RealizedSecurityGroup` or ``None``
        :param results: Paged Collection of realized Security Groups
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


RealizedSecurityGroupListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.realized_security_group_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'RealizedSecurityGroup'))),
    },
    RealizedSecurityGroupListResult,
    False,
    None))



class RealizedSecurityGroupMemberEvaluation(VapiStruct):
    """
    Realized Security Group member evaluation

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    STATE_UNAVAILABLE = "UNAVAILABLE"
    """


    """
    STATE_UNREALIZED = "UNREALIZED"
    """


    """
    STATE_REALIZED = "REALIZED"
    """


    """
    STATE_ERROR = "ERROR"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'alarms': 'alarms',
                            'intent_reference': 'intent_reference',
                            'realization_api': 'realization_api',
                            'realization_specific_identifier': 'realization_specific_identifier',
                            'runtime_error': 'runtime_error',
                            'runtime_status': 'runtime_status',
                            'state': 'state',
                            'member_count': 'member_count',
                            'virtual_machines': 'virtual_machines',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 alarms=None,
                 intent_reference=None,
                 realization_api=None,
                 realization_specific_identifier=None,
                 runtime_error=None,
                 runtime_status=None,
                 state=None,
                 member_count=None,
                 virtual_machines=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  alarms: :class:`list` of :class:`PolicyAlarmResource` or ``None``
        :param alarms: Alarm info detail
        :type  intent_reference: :class:`list` of :class:`str` or ``None``
        :param intent_reference: Desire state paths of this object
        :type  realization_api: :class:`str` or ``None``
        :param realization_api: Realization API of this object on enforcement point
        :type  realization_specific_identifier: :class:`str` or ``None``
        :param realization_specific_identifier: Realization id of this object
        :type  runtime_error: :class:`str` or ``None``
        :param runtime_error: It define the root cause for runtime error.
        :type  runtime_status: :class:`str` or ``None``
        :param runtime_status: Possible values could be UP, DOWN, UNKNOWN, DEGRADED This list is
            not exhaustive.
        :type  state: :class:`str` or ``None``
        :param state: Possible values are: 
            
            * :attr:`RealizedSecurityGroupMemberEvaluation.STATE_UNAVAILABLE`
            * :attr:`RealizedSecurityGroupMemberEvaluation.STATE_UNREALIZED`
            * :attr:`RealizedSecurityGroupMemberEvaluation.STATE_REALIZED`
            * :attr:`RealizedSecurityGroupMemberEvaluation.STATE_ERROR`
            
             Realization state of this object
        :type  member_count: :class:`long` or ``None``
        :param member_count: Count of the members added to this Security Group format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  virtual_machines: :class:`list` of :class:`RealizedVirtualMachine` or ``None``
        :param virtual_machines: list of virtual machines
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.alarms = alarms
        self.intent_reference = intent_reference
        self.realization_api = realization_api
        self.realization_specific_identifier = realization_specific_identifier
        self.runtime_error = runtime_error
        self.runtime_status = runtime_status
        self.state = state
        self.member_count = member_count
        self.virtual_machines = virtual_machines
        VapiStruct.__init__(self)


RealizedSecurityGroupMemberEvaluation._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.realized_security_group_member_evaluation', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'alarms': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyAlarmResource'))),
        'intent_reference': type.OptionalType(type.ListType(type.StringType())),
        'realization_api': type.OptionalType(type.StringType()),
        'realization_specific_identifier': type.OptionalType(type.StringType()),
        'runtime_error': type.OptionalType(type.StringType()),
        'runtime_status': type.OptionalType(type.StringType()),
        'state': type.OptionalType(type.StringType()),
        'member_count': type.OptionalType(type.IntegerType()),
        'virtual_machines': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'RealizedVirtualMachine'))),
    },
    RealizedSecurityGroupMemberEvaluation,
    False,
    None))



class RealizedService(VapiStruct):
    """
    Realized Service

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "RealizedService"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    RESOURCE_TYPE_REALIZEDNSSERVICE = "RealizedNSService"
    """


    """
    STATE_UNAVAILABLE = "UNAVAILABLE"
    """


    """
    STATE_UNREALIZED = "UNREALIZED"
    """


    """
    STATE_REALIZED = "REALIZED"
    """


    """
    STATE_ERROR = "ERROR"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'alarms': 'alarms',
                            'intent_reference': 'intent_reference',
                            'realization_api': 'realization_api',
                            'realization_specific_identifier': 'realization_specific_identifier',
                            'runtime_error': 'runtime_error',
                            'runtime_status': 'runtime_status',
                            'state': 'state',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='RealizedService',
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 alarms=None,
                 intent_reference=None,
                 realization_api=None,
                 realization_specific_identifier=None,
                 runtime_error=None,
                 runtime_status=None,
                 state=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`RealizedService.RESOURCE_TYPE_REALIZEDNSSERVICE`
            
             Realized services
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  alarms: :class:`list` of :class:`PolicyAlarmResource` or ``None``
        :param alarms: Alarm info detail
        :type  intent_reference: :class:`list` of :class:`str` or ``None``
        :param intent_reference: Desire state paths of this object
        :type  realization_api: :class:`str` or ``None``
        :param realization_api: Realization API of this object on enforcement point
        :type  realization_specific_identifier: :class:`str` or ``None``
        :param realization_specific_identifier: Realization id of this object
        :type  runtime_error: :class:`str` or ``None``
        :param runtime_error: It define the root cause for runtime error.
        :type  runtime_status: :class:`str` or ``None``
        :param runtime_status: Possible values could be UP, DOWN, UNKNOWN, DEGRADED This list is
            not exhaustive.
        :type  state: :class:`str` or ``None``
        :param state: Possible values are: 
            
            * :attr:`RealizedService.STATE_UNAVAILABLE`
            * :attr:`RealizedService.STATE_UNREALIZED`
            * :attr:`RealizedService.STATE_REALIZED`
            * :attr:`RealizedService.STATE_ERROR`
            
             Realization state of this object
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.alarms = alarms
        self.intent_reference = intent_reference
        self.realization_api = realization_api
        self.realization_specific_identifier = realization_specific_identifier
        self.runtime_error = runtime_error
        self.runtime_status = runtime_status
        self.state = state
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

RealizedService._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.realized_service', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'alarms': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyAlarmResource'))),
        'intent_reference': type.OptionalType(type.ListType(type.StringType())),
        'realization_api': type.OptionalType(type.StringType()),
        'realization_specific_identifier': type.OptionalType(type.StringType()),
        'runtime_error': type.OptionalType(type.StringType()),
        'runtime_status': type.OptionalType(type.StringType()),
        'state': type.OptionalType(type.StringType()),
    },
    RealizedService,
    False,
    None))



class RealizedServices(VapiStruct):
    """
    Realized services

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    STATE_UNAVAILABLE = "UNAVAILABLE"
    """


    """
    STATE_UNREALIZED = "UNREALIZED"
    """


    """
    STATE_REALIZED = "REALIZED"
    """


    """
    STATE_ERROR = "ERROR"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'alarms': 'alarms',
                            'intent_reference': 'intent_reference',
                            'realization_api': 'realization_api',
                            'realization_specific_identifier': 'realization_specific_identifier',
                            'runtime_error': 'runtime_error',
                            'runtime_status': 'runtime_status',
                            'state': 'state',
                            'realized_services': 'realized_services',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 alarms=None,
                 intent_reference=None,
                 realization_api=None,
                 realization_specific_identifier=None,
                 runtime_error=None,
                 runtime_status=None,
                 state=None,
                 realized_services=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  alarms: :class:`list` of :class:`PolicyAlarmResource` or ``None``
        :param alarms: Alarm info detail
        :type  intent_reference: :class:`list` of :class:`str` or ``None``
        :param intent_reference: Desire state paths of this object
        :type  realization_api: :class:`str` or ``None``
        :param realization_api: Realization API of this object on enforcement point
        :type  realization_specific_identifier: :class:`str` or ``None``
        :param realization_specific_identifier: Realization id of this object
        :type  runtime_error: :class:`str` or ``None``
        :param runtime_error: It define the root cause for runtime error.
        :type  runtime_status: :class:`str` or ``None``
        :param runtime_status: Possible values could be UP, DOWN, UNKNOWN, DEGRADED This list is
            not exhaustive.
        :type  state: :class:`str` or ``None``
        :param state: Possible values are: 
            
            * :attr:`RealizedServices.STATE_UNAVAILABLE`
            * :attr:`RealizedServices.STATE_UNREALIZED`
            * :attr:`RealizedServices.STATE_REALIZED`
            * :attr:`RealizedServices.STATE_ERROR`
            
             Realization state of this object
        :type  realized_services: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param realized_services: List of realized services
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`RealizedService`. When methods return a value of this class
            as a return value, the attribute will contain all the attributes
            defined in :class:`RealizedService`.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.alarms = alarms
        self.intent_reference = intent_reference
        self.realization_api = realization_api
        self.realization_specific_identifier = realization_specific_identifier
        self.runtime_error = runtime_error
        self.runtime_status = runtime_status
        self.state = state
        self.realized_services = realized_services
        VapiStruct.__init__(self)


RealizedServices._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.realized_services', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'alarms': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyAlarmResource'))),
        'intent_reference': type.OptionalType(type.ListType(type.StringType())),
        'realization_api': type.OptionalType(type.StringType()),
        'realization_specific_identifier': type.OptionalType(type.StringType()),
        'runtime_error': type.OptionalType(type.StringType()),
        'runtime_status': type.OptionalType(type.StringType()),
        'state': type.OptionalType(type.StringType()),
        'realized_services': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'RealizedService')]))),
    },
    RealizedServices,
    False,
    None))



class RealizedVirtualMachine(VapiStruct):
    """
    Realized Virtual Machine

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    STATE_UNAVAILABLE = "UNAVAILABLE"
    """


    """
    STATE_UNREALIZED = "UNREALIZED"
    """


    """
    STATE_REALIZED = "REALIZED"
    """


    """
    STATE_ERROR = "ERROR"
    """


    """
    POWER_STATE_VM_RUNNING = "VM_RUNNING"
    """


    """
    POWER_STATE_VM_STOPPED = "VM_STOPPED"
    """


    """
    POWER_STATE_VM_SUSPENDED = "VM_SUSPENDED"
    """


    """
    POWER_STATE_UNKNOWN = "UNKNOWN"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'alarms': 'alarms',
                            'intent_reference': 'intent_reference',
                            'realization_api': 'realization_api',
                            'realization_specific_identifier': 'realization_specific_identifier',
                            'runtime_error': 'runtime_error',
                            'runtime_status': 'runtime_status',
                            'state': 'state',
                            'compute_ids': 'compute_ids',
                            'host_id': 'host_id',
                            'local_id_on_host': 'local_id_on_host',
                            'power_state': 'power_state',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 alarms=None,
                 intent_reference=None,
                 realization_api=None,
                 realization_specific_identifier=None,
                 runtime_error=None,
                 runtime_status=None,
                 state=None,
                 compute_ids=None,
                 host_id=None,
                 local_id_on_host=None,
                 power_state=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  alarms: :class:`list` of :class:`PolicyAlarmResource` or ``None``
        :param alarms: Alarm info detail
        :type  intent_reference: :class:`list` of :class:`str` or ``None``
        :param intent_reference: Desire state paths of this object
        :type  realization_api: :class:`str` or ``None``
        :param realization_api: Realization API of this object on enforcement point
        :type  realization_specific_identifier: :class:`str` or ``None``
        :param realization_specific_identifier: Realization id of this object
        :type  runtime_error: :class:`str` or ``None``
        :param runtime_error: It define the root cause for runtime error.
        :type  runtime_status: :class:`str` or ``None``
        :param runtime_status: Possible values could be UP, DOWN, UNKNOWN, DEGRADED This list is
            not exhaustive.
        :type  state: :class:`str` or ``None``
        :param state: Possible values are: 
            
            * :attr:`RealizedVirtualMachine.STATE_UNAVAILABLE`
            * :attr:`RealizedVirtualMachine.STATE_UNREALIZED`
            * :attr:`RealizedVirtualMachine.STATE_REALIZED`
            * :attr:`RealizedVirtualMachine.STATE_ERROR`
            
             Realization state of this object
        :type  compute_ids: :class:`list` of :class:`str` or ``None``
        :param compute_ids: List of external compute ids of the virtual machine in the format
            'id-type-key:value' , list of external compute ids
            ['uuid:xxxx-xxxx-xxxx-xxxx', 'moIdOnHost:moref-11',
            'instanceUuid:xxxx-xxxx-xxxx-xxxx']
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  host_id: :class:`str` or ``None``
        :param host_id: Id of the host on which the vm exists.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  local_id_on_host: :class:`str` or ``None``
        :param local_id_on_host: Id of the vm unique within the host.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  power_state: :class:`str` or ``None``
        :param power_state: Possible values are: 
            
            * :attr:`RealizedVirtualMachine.POWER_STATE_VM_RUNNING`
            * :attr:`RealizedVirtualMachine.POWER_STATE_VM_STOPPED`
            * :attr:`RealizedVirtualMachine.POWER_STATE_VM_SUSPENDED`
            * :attr:`RealizedVirtualMachine.POWER_STATE_UNKNOWN`
            
             Current power state of this virtual machine in the system.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.alarms = alarms
        self.intent_reference = intent_reference
        self.realization_api = realization_api
        self.realization_specific_identifier = realization_specific_identifier
        self.runtime_error = runtime_error
        self.runtime_status = runtime_status
        self.state = state
        self.compute_ids = compute_ids
        self.host_id = host_id
        self.local_id_on_host = local_id_on_host
        self.power_state = power_state
        VapiStruct.__init__(self)


RealizedVirtualMachine._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.realized_virtual_machine', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'alarms': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyAlarmResource'))),
        'intent_reference': type.OptionalType(type.ListType(type.StringType())),
        'realization_api': type.OptionalType(type.StringType()),
        'realization_specific_identifier': type.OptionalType(type.StringType()),
        'runtime_error': type.OptionalType(type.StringType()),
        'runtime_status': type.OptionalType(type.StringType()),
        'state': type.OptionalType(type.StringType()),
        'compute_ids': type.OptionalType(type.ListType(type.StringType())),
        'host_id': type.OptionalType(type.StringType()),
        'local_id_on_host': type.OptionalType(type.StringType()),
        'power_state': type.OptionalType(type.StringType()),
    },
    RealizedVirtualMachine,
    False,
    None))



class RealizedVirtualMachineListResult(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`RealizedVirtualMachine` or ``None``
        :param results: Paged Collection of VMs
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


RealizedVirtualMachineListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.realized_virtual_machine_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'RealizedVirtualMachine'))),
    },
    RealizedVirtualMachineListResult,
    False,
    None))



class RedirectionPolicy(VapiStruct):
    """
    Ordered list of rules long with the path of PolicyServiceInstance to which
    the traffic needs to be redirected. | Please note that the scope property
    must be provided for NS redirection | policy if redirect to is a service
    chain. For NS, when redirect to is not | to the service chain, and scope is
    specified on RedirectionPolicy, it | will be ignored. The scope will be
    determined from redirect to path | instead. For EW policy, scope must not
    be supplied in the request. | Path to either Tier0 or Tier1 is allowed as
    the scope. Only 1 path | can be specified as a scope. | Also, note that, if
    stateful flag is not sent, it will be treated as true. If statelessness is
    intended, false must be sent explicitly as the value | for stateful field.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'category': 'category',
                            'comments': 'comments',
                            'internal_sequence_number': 'internal_sequence_number',
                            'is_default': 'is_default',
                            'lock_modified_by': 'lock_modified_by',
                            'lock_modified_time': 'lock_modified_time',
                            'locked': 'locked',
                            'rule_count': 'rule_count',
                            'scheduler_path': 'scheduler_path',
                            'scope': 'scope',
                            'sequence_number': 'sequence_number',
                            'stateful': 'stateful',
                            'tcp_strict': 'tcp_strict',
                            'north_south': 'north_south',
                            'redirect_to': 'redirect_to',
                            'rules': 'rules',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 category=None,
                 comments=None,
                 internal_sequence_number=None,
                 is_default=None,
                 lock_modified_by=None,
                 lock_modified_time=None,
                 locked=None,
                 rule_count=None,
                 scheduler_path=None,
                 scope=None,
                 sequence_number=None,
                 stateful=None,
                 tcp_strict=None,
                 north_south=None,
                 redirect_to=None,
                 rules=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  category: :class:`str` or ``None``
        :param category: - Distributed Firewall - Policy framework provides five pre-defined
            categories for classifying a security policy. They are
            \"Ethernet\",\"Emergency\", \"Infrastructure\" \"Environment\" and
            \"Application\". There is a pre-determined order in which the
            policy framework manages the priority of these security policies.
            Ethernet category is for supporting layer 2 firewall rules. The
            other four categories are applicable for layer 3 rules. Amongst
            them, the Emergency category has the highest priority followed by
            Infrastructure, Environment and then Application rules.
            Administrator can choose to categorize a security policy into the
            above categories or can choose to leave it empty. If empty it will
            have the least precedence w.r.t the above four categories. - Edge
            Firewall - Policy Framework for Edge Firewall provides six
            pre-defined categories \"Emergency\", \"SystemRules\",
            \"SharedPreRules\", \"LocalGatewayRules\", \"AutoServiceRules\" and
            \"Default\", in order of priority of rules. All categories are
            allowed for Gatetway Policies that belong to 'default' Domain.
            However, for user created domains, category is restricted to
            \"SharedPreRules\" or \"LocalGatewayRules\" only. Also, the users
            can add/modify/delete rules from only the \"SharedPreRules\" and
            \"LocalGatewayRules\" categories. If user doesn't specify the
            category then defaulted to \"Rules\". System generated category is
            used by NSX created rules, for example BFD rules. Autoplumbed
            category used by NSX verticals to autoplumb data path rules.
            Finally, \"Default\" category is the placeholder default rules with
            lowest in the order of priority.
        :type  comments: :class:`str` or ``None``
        :param comments: Comments for security policy lock/unlock.
        :type  internal_sequence_number: :class:`long` or ``None``
        :param internal_sequence_number: This field is to indicate the internal sequence number of a policy
            with respect to the policies across categories. format: int32
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  is_default: :class:`bool` or ``None``
        :param is_default: A flag to indicate whether policy is a default policy.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  lock_modified_by: :class:`str` or ``None``
        :param lock_modified_by: ID of the user who last modified the lock for the secruity policy.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  lock_modified_time: :class:`long` or ``None``
        :param lock_modified_time: SecurityPolicy locked/unlocked time in epoch milliseconds. format:
            int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  locked: :class:`bool` or ``None``
        :param locked: Indicates whether a security policy should be locked. If the
            security policy is locked by a user, then no other user would be
            able to modify this security policy. Once the user releases the
            lock, other users can update this security policy.
        :type  rule_count: :class:`long` or ``None``
        :param rule_count: The count of rules in the policy. format: int32
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  scheduler_path: :class:`str` or ``None``
        :param scheduler_path: Provides a mechanism to apply the rules in this policy for a
            specified time duration.
        :type  scope: :class:`list` of :class:`str` or ``None``
        :param scope: The list of group paths where the rules in this policy will get
            applied. This scope will take precedence over rule level scope.
            Supported only for security and redirection policies. In case of
            RedirectionPolicy, it is expected only when the policy is NS and
            redirecting to service chain.
        :type  sequence_number: :class:`long` or ``None``
        :param sequence_number: This field is used to resolve conflicts between security policies
            across domains. In order to change the sequence number of a policy
            one can fire a POST request on the policy entity with a query
            parameter action=revise The sequence number field will reflect the
            value of the computed sequence number upon execution of the above
            mentioned POST request. For scenarios where the administrator is
            using a template to update several security policies, the only way
            to set the sequence number is to explicitly specify the sequence
            number for each security policy. If no sequence number is specified
            in the payload, a value of 0 is assigned by default. If there are
            multiple policies with the same sequence number then their order is
            not deterministic. If a specific order of policies is desired, then
            one has to specify unique sequence numbers or use the POST request
            on the policy entity with a query parameter action=revise to let
            the framework assign a sequence number format: int32
        :type  stateful: :class:`bool` or ``None``
        :param stateful: Stateful or Stateless nature of security policy is enforced on all
            rules in this security policy. When it is stateful, the state of
            the network connects are tracked and a stateful packet inspection
            is performed. Layer3 security policies can be stateful or
            stateless. By default, they are stateful. Layer2 security policies
            can only be stateless.
        :type  tcp_strict: :class:`bool` or ``None``
        :param tcp_strict: Ensures that a 3 way TCP handshake is done before the data packets
            are sent. tcp_strict=true is supported only for stateful security
            policies. If the tcp_strict flag is not specified and the security
            policy is stateful, then tcp_strict will be set to true.
        :type  north_south: :class:`bool` or ``None``
        :param north_south: This is the read only flag which will state the direction of this |
            redirection policy. True denotes that it is NORTH-SOUTH and false |
            value means it is an EAST-WEST redirection policy.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  redirect_to: :class:`list` of :class:`str` or ``None``
        :param redirect_to: Paths to which traffic will be redirected to. As of now, only 1 is
            | supported. Paths allowed are | 1. Policy Service Instance | 2.
            Service Instance Endpoint | 3. Virtual Endpoint | 4. Policy Service
            Chain
        :type  rules: :class:`list` of :class:`RedirectionRule` or ``None``
        :param rules: Redirection rules that are a part of this RedirectionPolicy. At
            max, there can be 1000 rules in a given RedirectPolicy.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.category = category
        self.comments = comments
        self.internal_sequence_number = internal_sequence_number
        self.is_default = is_default
        self.lock_modified_by = lock_modified_by
        self.lock_modified_time = lock_modified_time
        self.locked = locked
        self.rule_count = rule_count
        self.scheduler_path = scheduler_path
        self.scope = scope
        self.sequence_number = sequence_number
        self.stateful = stateful
        self.tcp_strict = tcp_strict
        self.north_south = north_south
        self.redirect_to = redirect_to
        self.rules = rules
        VapiStruct.__init__(self)


RedirectionPolicy._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.redirection_policy', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'category': type.OptionalType(type.StringType()),
        'comments': type.OptionalType(type.StringType()),
        'internal_sequence_number': type.OptionalType(type.IntegerType()),
        'is_default': type.OptionalType(type.BooleanType()),
        'lock_modified_by': type.OptionalType(type.StringType()),
        'lock_modified_time': type.OptionalType(type.IntegerType()),
        'locked': type.OptionalType(type.BooleanType()),
        'rule_count': type.OptionalType(type.IntegerType()),
        'scheduler_path': type.OptionalType(type.StringType()),
        'scope': type.OptionalType(type.ListType(type.StringType())),
        'sequence_number': type.OptionalType(type.IntegerType()),
        'stateful': type.OptionalType(type.BooleanType()),
        'tcp_strict': type.OptionalType(type.BooleanType()),
        'north_south': type.OptionalType(type.BooleanType()),
        'redirect_to': type.OptionalType(type.ListType(type.StringType())),
        'rules': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'RedirectionRule'))),
    },
    RedirectionPolicy,
    False,
    None))



class RedirectionPolicyListResult(VapiStruct):
    """
    Paged Collection of Redirection Policies

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`RedirectionPolicy` or ``None``
        :param results: Redirection policy list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


RedirectionPolicyListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.redirection_policy_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'RedirectionPolicy'))),
    },
    RedirectionPolicyListResult,
    False,
    None))



class RedirectionRule(VapiStruct):
    """
    It define redirection rule for service insertion

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    DIRECTION_IN = "IN"
    """


    """
    DIRECTION_OUT = "OUT"
    """


    """
    DIRECTION_IN_OUT = "IN_OUT"
    """


    """
    IP_PROTOCOL_IPV4 = "IPV4"
    """


    """
    IP_PROTOCOL_IPV6 = "IPV6"
    """


    """
    IP_PROTOCOL_IPV4_IPV6 = "IPV4_IPV6"
    """


    """
    ACTION_REDIRECT = "REDIRECT"
    """


    """
    ACTION_DO_NOT_REDIRECT = "DO_NOT_REDIRECT"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'destination_groups': 'destination_groups',
                            'destinations_excluded': 'destinations_excluded',
                            'direction': 'direction',
                            'disabled': 'disabled',
                            'ip_protocol': 'ip_protocol',
                            'is_default': 'is_default',
                            'logged': 'logged',
                            'notes': 'notes',
                            'profiles': 'profiles',
                            'rule_id': 'rule_id',
                            'scope': 'scope',
                            'sequence_number': 'sequence_number',
                            'service_entries': 'service_entries',
                            'services': 'services',
                            'source_groups': 'source_groups',
                            'sources_excluded': 'sources_excluded',
                            'tag': 'tag',
                            'action': 'action',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 destination_groups=None,
                 destinations_excluded=None,
                 direction=None,
                 disabled=None,
                 ip_protocol=None,
                 is_default=None,
                 logged=None,
                 notes=None,
                 profiles=None,
                 rule_id=None,
                 scope=None,
                 sequence_number=None,
                 service_entries=None,
                 services=None,
                 source_groups=None,
                 sources_excluded=None,
                 tag=None,
                 action=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  destination_groups: :class:`list` of :class:`str` or ``None``
        :param destination_groups: We need paths as duplicate names may exist for groups under
            different domains. Along with paths we support IP Address of type
            IPv4 and IPv6. IP Address can be in one of the format(CIDR, IP
            Address, Range of IP Address). In order to specify all groups, use
            the constant \"ANY\". This is case insensitive. If \"ANY\" is used,
            it should be the ONLY element in the group array. Error will be
            thrown if ANY is used in conjunction with other values.
        :type  destinations_excluded: :class:`bool` or ``None``
        :param destinations_excluded: If set to true, the rule gets applied on all the groups that are
            NOT part of the destination groups. If false, the rule applies to
            the destination groups
        :type  direction: :class:`str` or ``None``
        :param direction: Possible values are: 
            
            * :attr:`RedirectionRule.DIRECTION_IN`
            * :attr:`RedirectionRule.DIRECTION_OUT`
            * :attr:`RedirectionRule.DIRECTION_IN_OUT`
            
             Define direction of traffic.
        :type  disabled: :class:`bool` or ``None``
        :param disabled: Flag to disable the rule. Default is enabled.
        :type  ip_protocol: :class:`str` or ``None``
        :param ip_protocol: Possible values are: 
            
            * :attr:`RedirectionRule.IP_PROTOCOL_IPV4`
            * :attr:`RedirectionRule.IP_PROTOCOL_IPV6`
            * :attr:`RedirectionRule.IP_PROTOCOL_IPV4_IPV6`
            
            Type of IP packet that should be matched while enforcing the rule.
            The value is set to IPV4_IPV6 for Layer3 rule if not specified. For
            Layer2/Ether rule the value must be null.
        :type  is_default: :class:`bool` or ``None``
        :param is_default: A flag to indicate whether rule is a default rule.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  logged: :class:`bool` or ``None``
        :param logged: Flag to enable packet logging. Default is disabled.
        :type  notes: :class:`str` or ``None``
        :param notes: Text for additional notes on changes.
        :type  profiles: :class:`list` of :class:`str` or ``None``
        :param profiles: Holds the list of layer 7 service profile paths. These profiles
            accept attributes and sub-attributes of various network services
            (e.g. L4 AppId, encryption algorithm, domain name, etc) as key
            value pairs.
        :type  rule_id: :class:`long` or ``None``
        :param rule_id: This is a unique 4 byte positive number that is assigned by the
            system. This rule id is passed all the way down to the data path.
            The first 1GB (1000 to 2^30) will be shared by GM and LM with zebra
            style striped number space. For E.g 1000 to (1Million -1) by LM,
            (1M - 2M-1) by GM and so on. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  scope: :class:`list` of :class:`str` or ``None``
        :param scope: The list of policy paths where the rule is applied
            LR/Edge/T0/T1/LRP etc. Note that a given rule can be applied on
            multiple LRs/LRPs.
        :type  sequence_number: :class:`long` or ``None``
        :param sequence_number: This field is used to resolve conflicts between multiple Rules
            under Security or Gateway Policy for a Domain If no sequence number
            is specified in the payload, a value of 0 is assigned by default.
            If there are multiple rules with the same sequence number then
            their order is not deterministic. If a specific order of rules is
            desired, then one has to specify unique sequence numbers or use the
            POST request on the rule entity with a query parameter
            action=revise to let the framework assign a sequence number format:
            int32
        :type  service_entries: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param service_entries: In order to specify raw services this can be used, along with
            services which contains path to services. This can be empty or
            null.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ServiceEntry`. When methods return a value of this class as
            a return value, the attribute will contain all the attributes
            defined in :class:`ServiceEntry`.
        :type  services: :class:`list` of :class:`str` or ``None``
        :param services: In order to specify all services, use the constant \"ANY\". This is
            case insensitive. If \"ANY\" is used, it should be the ONLY element
            in the services array. Error will be thrown if ANY is used in
            conjunction with other values.
        :type  source_groups: :class:`list` of :class:`str` or ``None``
        :param source_groups: We need paths as duplicate names may exist for groups under
            different domains. Along with paths we support IP Address of type
            IPv4 and IPv6. IP Address can be in one of the format(CIDR, IP
            Address, Range of IP Address). In order to specify all groups, use
            the constant \"ANY\". This is case insensitive. If \"ANY\" is used,
            it should be the ONLY element in the group array. Error will be
            thrown if ANY is used in conjunction with other values.
        :type  sources_excluded: :class:`bool` or ``None``
        :param sources_excluded: If set to true, the rule gets applied on all the groups that are
            NOT part of the source groups. If false, the rule applies to the
            source groups
        :type  tag: :class:`str` or ``None``
        :param tag: User level field which will be printed in CLI and packet logs.
        :type  action: :class:`str` or ``None``
        :param action: Possible values are: 
            
            * :attr:`RedirectionRule.ACTION_REDIRECT`
            * :attr:`RedirectionRule.ACTION_DO_NOT_REDIRECT`
            
             The action to be applied to all the services
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.destination_groups = destination_groups
        self.destinations_excluded = destinations_excluded
        self.direction = direction
        self.disabled = disabled
        self.ip_protocol = ip_protocol
        self.is_default = is_default
        self.logged = logged
        self.notes = notes
        self.profiles = profiles
        self.rule_id = rule_id
        self.scope = scope
        self.sequence_number = sequence_number
        self.service_entries = service_entries
        self.services = services
        self.source_groups = source_groups
        self.sources_excluded = sources_excluded
        self.tag = tag
        self.action = action
        VapiStruct.__init__(self)


RedirectionRule._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.redirection_rule', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'destination_groups': type.OptionalType(type.ListType(type.StringType())),
        'destinations_excluded': type.OptionalType(type.BooleanType()),
        'direction': type.OptionalType(type.StringType()),
        'disabled': type.OptionalType(type.BooleanType()),
        'ip_protocol': type.OptionalType(type.StringType()),
        'is_default': type.OptionalType(type.BooleanType()),
        'logged': type.OptionalType(type.BooleanType()),
        'notes': type.OptionalType(type.StringType()),
        'profiles': type.OptionalType(type.ListType(type.StringType())),
        'rule_id': type.OptionalType(type.IntegerType()),
        'scope': type.OptionalType(type.ListType(type.StringType())),
        'sequence_number': type.OptionalType(type.IntegerType()),
        'service_entries': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ServiceEntry')]))),
        'services': type.OptionalType(type.ListType(type.StringType())),
        'source_groups': type.OptionalType(type.ListType(type.StringType())),
        'sources_excluded': type.OptionalType(type.BooleanType()),
        'tag': type.OptionalType(type.StringType()),
        'action': type.OptionalType(type.StringType()),
    },
    RedirectionRule,
    False,
    None))



class RedirectionRuleListResult(VapiStruct):
    """
    Paged Collection of RedirectionRules

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`RedirectionRule` or ``None``
        :param results: RedirectionRule list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


RedirectionRuleListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.redirection_rule_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'RedirectionRule'))),
    },
    RedirectionRuleListResult,
    False,
    None))



class RegistrationToken(VapiStruct):
    """
    Appliance registration access token

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'roles': 'roles',
                            'token': 'token',
                            'user': 'user',
                            }

    def __init__(self,
                 roles=None,
                 token=None,
                 user=None,
                ):
        """
        :type  roles: :class:`list` of :class:`str` or ``None``
        :param roles: List results
        :type  token: :class:`str` or ``None``
        :param token: Access token
        :type  user: :class:`str` or ``None``
        :param user: User delegated by token
        """
        self.roles = roles
        self.token = token
        self.user = user
        VapiStruct.__init__(self)


RegistrationToken._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.registration_token', {
        'roles': type.OptionalType(type.ListType(type.StringType())),
        'token': type.OptionalType(type.StringType()),
        'user': type.OptionalType(type.StringType()),
    },
    RegistrationToken,
    False,
    None))



class RelatedApiError(VapiStruct):
    """
    Detailed information about a related API error

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'details': 'details',
                            'error_code': 'error_code',
                            'error_data': 'error_data',
                            'error_message': 'error_message',
                            'module_name': 'module_name',
                            }

    def __init__(self,
                 details=None,
                 error_code=None,
                 error_data=None,
                 error_message=None,
                 module_name=None,
                ):
        """
        :type  details: :class:`str` or ``None``
        :param details: Further details about the error
        :type  error_code: :class:`long` or ``None``
        :param error_code: A numeric error code format: int64
        :type  error_data: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param error_data: Additional data about the error
        :type  error_message: :class:`str` or ``None``
        :param error_message: A description of the error
        :type  module_name: :class:`str` or ``None``
        :param module_name: The module name where the error occurred
        """
        self.details = details
        self.error_code = error_code
        self.error_data = error_data
        self.error_message = error_message
        self.module_name = module_name
        VapiStruct.__init__(self)


RelatedApiError._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.related_api_error', {
        'details': type.OptionalType(type.StringType()),
        'error_code': type.OptionalType(type.IntegerType()),
        'error_data': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct)),
        'error_message': type.OptionalType(type.StringType()),
        'module_name': type.OptionalType(type.StringType()),
    },
    RelatedApiError,
    False,
    None))



class RelatedAttribute(VapiStruct):
    """
    Related attribute on the target resource for conditional constraints based
    on related attribute value. Example - destinationGroups/service/action is
    related attribute of sourceGroups in communcation entry.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'attribute': 'attribute',
                            }

    def __init__(self,
                 attribute=None,
                ):
        """
        :type  attribute: :class:`str` or ``None``
        :param attribute: Related attribute name on the target entity.
        """
        self.attribute = attribute
        VapiStruct.__init__(self)


RelatedAttribute._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.related_attribute', {
        'attribute': type.OptionalType(type.StringType()),
    },
    RelatedAttribute,
    False,
    None))



class RelatedAttributeConditionalExpression(VapiStruct):
    """
    Represents the leaf level type expression to express constraint as value of
    realted attribute to the target. Example - Constraint traget attribute 'X'
    (example in Constraint), if destinationGroups contains 'vCeneter' then
    allow only values \"HTTPS\", \"HTTP\" for attribute X. { \"target\":{
    \"target_resource_type\":\"CommunicationEntry\",
    \"attribute\":\"services\", \"path_prefix\":
    \"/infra/domains/{{DOMAIN}}/edge-communication-maps/default/communication-entries/\"
    }, \"constraint_expression\": { \"resource_type\":
    \"RelatedAttributeConditionalExpression\", \"related_attribute\":{
    \"attribute\":\"destinationGroups\" }, \"condition\" : {
    \"operator\":\"INCLUDES\", \"rhs_value\":
    [\"/infra/domains/mgw/groups/VCENTER\"], \"value_constraint\": {
    \"resource_type\": \"ValueConstraintExpression\",
    \"operator\":\"INCLUDES\", \"values\":[\"/infra/services/HTTP\",
    \"/infra/services/HTTPS\"] } } } }

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "RelatedAttributeConditionalExpression"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'condition': 'condition',
                            'related_attribute': 'related_attribute',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            }

    def __init__(self,
                 condition=None,
                 related_attribute=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='RelatedAttributeConditionalExpression',
                 tags=None,
                ):
        """
        :type  condition: :class:`ConditionalValueConstraintExpression` or ``None``
        :param condition: Conditional value expression for target based on realted attribute
            value.
        :type  related_attribute: :class:`RelatedAttribute` or ``None``
        :param related_attribute: Related attribute.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`ConstraintExpression.RESOURCE_TYPE_VALUECONSTRAINTEXPRESSION`
            *
              :attr:`ConstraintExpression.RESOURCE_TYPE_RELATEDATTRIBUTECONDITIONALEXPRESSION`
            *
              :attr:`ConstraintExpression.RESOURCE_TYPE_ENTITYINSTANCECOUNTCONSTRAINTEXPRESSION`
            *
              :attr:`ConstraintExpression.RESOURCE_TYPE_FIELDSANITYCONSTRAINTEXPRESSION`
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        """
        self.condition = condition
        self.related_attribute = related_attribute
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

RelatedAttributeConditionalExpression._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.related_attribute_conditional_expression', {
        'condition': type.OptionalType(type.ReferenceType(__name__, 'ConditionalValueConstraintExpression')),
        'related_attribute': type.OptionalType(type.ReferenceType(__name__, 'RelatedAttribute')),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
    },
    RelatedAttributeConditionalExpression,
    False,
    None))



class RemoteFileServer(VapiStruct):
    """
    Remote file server

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'directory_path': 'directory_path',
                            'port': 'port',
                            'protocol': 'protocol',
                            'server': 'server',
                            }

    def __init__(self,
                 directory_path=None,
                 port=None,
                 protocol=None,
                 server=None,
                ):
        """
        :type  directory_path: :class:`str` or ``None``
        :param directory_path: Remote server directory to copy bundle files to
        :type  port: :class:`long` or ``None``
        :param port: Server port format: int64
        :type  protocol: :class:`FileTransferProtocol` or ``None``
        :param protocol: Protocol to use to copy file
        :type  server: :class:`str` or ``None``
        :param server: Remote server hostname or IP address format: hostname-or-ip
        """
        self.directory_path = directory_path
        self.port = port
        self.protocol = protocol
        self.server = server
        VapiStruct.__init__(self)


RemoteFileServer._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.remote_file_server', {
        'directory_path': type.OptionalType(type.StringType()),
        'port': type.OptionalType(type.IntegerType()),
        'protocol': type.OptionalType(type.ReferenceType(__name__, 'FileTransferProtocol')),
        'server': type.OptionalType(type.StringType()),
    },
    RemoteFileServer,
    False,
    None))



class RemoteServerFingerprint(VapiStruct):
    """
    Remote server

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'port': 'port',
                            'server': 'server',
                            'ssh_fingerprint': 'ssh_fingerprint',
                            }

    def __init__(self,
                 port=None,
                 server=None,
                 ssh_fingerprint=None,
                ):
        """
        :type  port: :class:`long` or ``None``
        :param port: Server port format: int64
        :type  server: :class:`str` or ``None``
        :param server: Remote server hostname or IP address format: hostname-or-ip
        :type  ssh_fingerprint: :class:`str` or ``None``
        :param ssh_fingerprint: SSH fingerprint of server
        """
        self.port = port
        self.server = server
        self.ssh_fingerprint = ssh_fingerprint
        VapiStruct.__init__(self)


RemoteServerFingerprint._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.remote_server_fingerprint', {
        'port': type.OptionalType(type.IntegerType()),
        'server': type.OptionalType(type.StringType()),
        'ssh_fingerprint': type.OptionalType(type.StringType()),
    },
    RemoteServerFingerprint,
    False,
    None))



class RemoteServerFingerprintRequest(VapiStruct):
    """
    Remote server

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'port': 'port',
                            'server': 'server',
                            }

    def __init__(self,
                 port=None,
                 server=None,
                ):
        """
        :type  port: :class:`long` or ``None``
        :param port: Server port format: int64
        :type  server: :class:`str` or ``None``
        :param server: Remote server hostname or IP address format: hostname-or-ip
        """
        self.port = port
        self.server = server
        VapiStruct.__init__(self)


RemoteServerFingerprintRequest._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.remote_server_fingerprint_request', {
        'port': type.OptionalType(type.IntegerType()),
        'server': type.OptionalType(type.StringType()),
    },
    RemoteServerFingerprintRequest,
    False,
    None))



class RenderConfiguration(VapiStruct):
    """
    Render configuration to be applied to the widget.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    COLOR_GREY = "GREY"
    """


    """
    COLOR_DARK_GREY = "DARK_GREY"
    """


    """
    COLOR_LIGHT_GREY = "LIGHT_GREY"
    """


    """
    COLOR_SKY_BLUE = "SKY_BLUE"
    """


    """
    COLOR_BLUE = "BLUE"
    """


    """
    COLOR_GREEN = "GREEN"
    """


    """
    COLOR_YELLOW = "YELLOW"
    """


    """
    COLOR_RED = "RED"
    """


    """
    COLOR_DARK_RED = "DARK_RED"
    """


    """



    _canonical_to_pep_names = {
                            'color': 'color',
                            'condition': 'condition',
                            'display_value': 'display_value',
                            'icons': 'icons',
                            'tooltip': 'tooltip',
                            }

    def __init__(self,
                 color=None,
                 condition=None,
                 display_value=None,
                 icons=None,
                 tooltip=None,
                ):
        """
        :type  color: :class:`str` or ``None``
        :param color: Possible values are: 
            
            * :attr:`RenderConfiguration.COLOR_GREY`
            * :attr:`RenderConfiguration.COLOR_DARK_GREY`
            * :attr:`RenderConfiguration.COLOR_LIGHT_GREY`
            * :attr:`RenderConfiguration.COLOR_SKY_BLUE`
            * :attr:`RenderConfiguration.COLOR_BLUE`
            * :attr:`RenderConfiguration.COLOR_GREEN`
            * :attr:`RenderConfiguration.COLOR_YELLOW`
            * :attr:`RenderConfiguration.COLOR_RED`
            * :attr:`RenderConfiguration.COLOR_DARK_RED`
            
            The color to use when rendering an entity. For example, set color
            as 'RED' to render a portion of donut in red.
        :type  condition: :class:`str` or ``None``
        :param condition: If the condition is met then the rendering specified for the
            condition will be applied. Examples of expression syntax are
            provided under 'example_request' section of
            'CreateWidgetConfiguration' API.
        :type  display_value: :class:`str` or ``None``
        :param display_value: If specified, overrides the field value. This can be used to
            display a meaningful value in situations where field value is not
            available or not configured.
        :type  icons: :class:`list` of :class:`Icon` or ``None``
        :param icons: Icons to be applied at dashboard for widgets and UI elements.
        :type  tooltip: :class:`list` of :class:`Tooltip` or ``None``
        :param tooltip: Multi-line text to be shown on tooltip while hovering over the UI
            element if the condition is met.
        """
        self.color = color
        self.condition = condition
        self.display_value = display_value
        self.icons = icons
        self.tooltip = tooltip
        VapiStruct.__init__(self)


RenderConfiguration._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.render_configuration', {
        'color': type.OptionalType(type.StringType()),
        'condition': type.OptionalType(type.StringType()),
        'display_value': type.OptionalType(type.StringType()),
        'icons': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Icon'))),
        'tooltip': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tooltip'))),
    },
    RenderConfiguration,
    False,
    None))



class Resource(VapiStruct):
    """
    Base class for resources

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        VapiStruct.__init__(self)


Resource._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.resource', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
    },
    Resource,
    False,
    None))



class ResourceFieldPointer(VapiStruct):
    """
    Resource Field Pointer representing the exact value within a policy object.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'field_pointer': 'field_pointer',
                            'path': 'path',
                            }

    def __init__(self,
                 field_pointer=None,
                 path=None,
                ):
        """
        :type  field_pointer: :class:`str` or ``None``
        :param field_pointer: Field Pointer referencing the exact field within the policy object.
        :type  path: :class:`str` or ``None``
        :param path: Policy Path referencing a policy object. If not supplied, the field
            pointer will be applied to the event source.
        """
        self.field_pointer = field_pointer
        self.path = path
        VapiStruct.__init__(self)


ResourceFieldPointer._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.resource_field_pointer', {
        'field_pointer': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
    },
    ResourceFieldPointer,
    False,
    None))



class ResourceInfo(VapiStruct):
    """
    It represents the resource information which could identify resource.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'resource_ids': 'resource_ids',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 resource_ids=None,
                 resource_type=None,
                ):
        """
        :type  resource_ids: :class:`list` of :class:`str` or ``None``
        :param resource_ids: It will represent resource identifiers. For example, policy objects
            will be represented with paths and virtual machine will be
            represented with external ids.
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: It will represent resource type on which tag bulk operation to be
            performed. Supported resource type is VirtualMachine.
        """
        self.resource_ids = resource_ids
        self.resource_type = resource_type
        VapiStruct.__init__(self)


ResourceInfo._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.resource_info', {
        'resource_ids': type.OptionalType(type.ListType(type.StringType())),
        'resource_type': type.OptionalType(type.StringType()),
    },
    ResourceInfo,
    False,
    None))



class ResourceInfoListResult(VapiStruct):
    """
    Collection of resource info objects

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`PolicyFineTuningResourceInfo` or ``None``
        :param results: Resource info list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


ResourceInfoListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.resource_info_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PolicyFineTuningResourceInfo'))),
    },
    ResourceInfoListResult,
    False,
    None))



class ResourceLink(VapiStruct):
    """
    A link to a related resource

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'action': 'action',
                            'href': 'href',
                            'rel': 'rel',
                            }

    def __init__(self,
                 action=None,
                 href=None,
                 rel=None,
                ):
        """
        :type  action: :class:`str` or ``None``
        :param action: Optional action
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  href: :class:`str` or ``None``
        :param href: Link to resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  rel: :class:`str` or ``None``
        :param rel: Custom relation type (follows RFC 5988 where appropriate
            definitions exist)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.action = action
        self.href = href
        self.rel = rel
        VapiStruct.__init__(self)


ResourceLink._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.resource_link', {
        'action': type.OptionalType(type.StringType()),
        'href': type.OptionalType(type.StringType()),
        'rel': type.OptionalType(type.StringType()),
    },
    ResourceLink,
    False,
    None))



class ResourceOperation(VapiStruct):
    """
    Resource Operation is an Event Source that represents a resource that is
    being changed at very specific points of time, with regard to its
    interaction with dao layer.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ResourceOperation"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    OPERATION_TYPES_POST_CREATE = "POST_CREATE"
    """


    """
    OPERATION_TYPES_POST_UPDATE = "POST_UPDATE"
    """


    """
    OPERATION_TYPES_PRE_DELETE = "PRE_DELETE"
    """


    """



    _canonical_to_pep_names = {
                            'operation_types': 'operation_types',
                            'resource_pointer': 'resource_pointer',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 operation_types=None,
                 resource_pointer=None,
                 resource_type='ResourceOperation',
                ):
        """
        :type  operation_types: :class:`list` of :class:`str` or ``None``
        :param operation_types: Possible values are: 
            
            * :attr:`ResourceOperation.OPERATION_TYPES_POST_CREATE`
            * :attr:`ResourceOperation.OPERATION_TYPES_POST_UPDATE`
            * :attr:`ResourceOperation.OPERATION_TYPES_PRE_DELETE`
            
             Operation types.
        :type  resource_pointer: :class:`str` or ``None``
        :param resource_pointer: Regex path representing a regex expression on resources. This regex
            is used to identify the object(s) that is/are the source of the
            Event. For instance: specifying \"Lb\* |
            /infra/tier-0s/vmc/ipsec-vpn-services/default\" as a source means
            that ANY resource starting with Lb or ANY resource with
            \"/infra/tier-0s/vmc/ipsec-vpn-services/default\" as path would be
            the source of the event in question.
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`Source.RESOURCE_TYPE_RESOURCEOPERATION`
            * :attr:`Source.RESOURCE_TYPE_APIREQUESTBODY`
            
             Event Source resource type.
        """
        self.operation_types = operation_types
        self.resource_pointer = resource_pointer
        self._resource_type = resource_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ResourceOperation._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.resource_operation', {
        'operation_types': type.OptionalType(type.ListType(type.StringType())),
        'resource_pointer': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
    },
    ResourceOperation,
    False,
    None))



class ResourceReference(VapiStruct):
    """
    A weak reference to an NSX resource.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'is_valid': 'is_valid',
                            'target_display_name': 'target_display_name',
                            'target_id': 'target_id',
                            'target_type': 'target_type',
                            }

    def __init__(self,
                 is_valid=None,
                 target_display_name=None,
                 target_id=None,
                 target_type=None,
                ):
        """
        :type  is_valid: :class:`bool` or ``None``
        :param is_valid: Will be set to false if the referenced NSX resource has been
            deleted.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  target_display_name: :class:`str` or ``None``
        :param target_display_name: Display name of the NSX resource.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  target_id: :class:`str` or ``None``
        :param target_id: Identifier of the NSX resource.
        :type  target_type: :class:`str` or ``None``
        :param target_type: Type of the NSX resource.
        """
        self.is_valid = is_valid
        self.target_display_name = target_display_name
        self.target_id = target_id
        self.target_type = target_type
        VapiStruct.__init__(self)


ResourceReference._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.resource_reference', {
        'is_valid': type.OptionalType(type.BooleanType()),
        'target_display_name': type.OptionalType(type.StringType()),
        'target_id': type.OptionalType(type.StringType()),
        'target_type': type.OptionalType(type.StringType()),
    },
    ResourceReference,
    False,
    None))



class ResourceTagStatus(VapiStruct):
    """
    It represents tag operation status for a resource and details of the
    failure if any.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    TAG_STATUS_SUCCESS = "Success"
    """


    """
    TAG_STATUS_ERROR = "Error"
    """


    """



    _canonical_to_pep_names = {
                            'details': 'details',
                            'resource_display_name': 'resource_display_name',
                            'resource_id': 'resource_id',
                            'tag_status': 'tag_status',
                            }

    def __init__(self,
                 details=None,
                 resource_display_name=None,
                 resource_id=None,
                 tag_status=None,
                ):
        """
        :type  details: :class:`str` or ``None``
        :param details: Details about the error if any
        :type  resource_display_name: :class:`str` or ``None``
        :param resource_display_name: Resource display name
        :type  resource_id: :class:`str` or ``None``
        :param resource_id: Resource id
        :type  tag_status: :class:`str` or ``None``
        :param tag_status: Possible values are: 
            
            * :attr:`ResourceTagStatus.TAG_STATUS_SUCCESS`
            * :attr:`ResourceTagStatus.TAG_STATUS_ERROR`
            
             Status of tag apply or remove operation
        """
        self.details = details
        self.resource_display_name = resource_display_name
        self.resource_id = resource_id
        self.tag_status = tag_status
        VapiStruct.__init__(self)


ResourceTagStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.resource_tag_status', {
        'details': type.OptionalType(type.StringType()),
        'resource_display_name': type.OptionalType(type.StringType()),
        'resource_id': type.OptionalType(type.StringType()),
        'tag_status': type.OptionalType(type.StringType()),
    },
    ResourceTagStatus,
    False,
    None))



class ResourceTypeTagStatus(VapiStruct):
    """
    Tag operation status for particular resource type and resource ids.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'resource_tag_status': 'resource_tag_status',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 resource_tag_status=None,
                 resource_type=None,
                ):
        """
        :type  resource_tag_status: :class:`list` of :class:`ResourceTagStatus` or ``None``
        :param resource_tag_status: List of resources on which tag needs to be applied
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: Resource type
        """
        self.resource_tag_status = resource_tag_status
        self.resource_type = resource_type
        VapiStruct.__init__(self)


ResourceTypeTagStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.resource_type_tag_status', {
        'resource_tag_status': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceTagStatus'))),
        'resource_type': type.OptionalType(type.StringType()),
    },
    ResourceTypeTagStatus,
    False,
    None))



class RestoreConfiguration(VapiStruct):
    """
    Configuration where backup files are stored for restore

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'passphrase': 'passphrase',
                            'remote_file_server': 'remote_file_server',
                            }

    def __init__(self,
                 passphrase=None,
                 remote_file_server=None,
                ):
        """
        :type  passphrase: :class:`str` or ``None``
        :param passphrase: Passphrase used to encrypt backup files.
        :type  remote_file_server: :class:`RemoteFileServer` or ``None``
        :param remote_file_server: The server from which backup files will be retrieved for restore.
        """
        self.passphrase = passphrase
        self.remote_file_server = remote_file_server
        VapiStruct.__init__(self)


RestoreConfiguration._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.restore_configuration', {
        'passphrase': type.OptionalType(type.StringType()),
        'remote_file_server': type.OptionalType(type.ReferenceType(__name__, 'RemoteFileServer')),
    },
    RestoreConfiguration,
    False,
    None))



class RestoreStep(VapiStruct):
    """
    Restore step info

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'description': 'description',
                            'status': 'status',
                            'step_number': 'step_number',
                            'value': 'value',
                            }

    def __init__(self,
                 description=None,
                 status=None,
                 step_number=None,
                 value=None,
                ):
        """
        :type  description: :class:`str` or ``None``
        :param description: Restore step description
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  status: :class:`PerStepRestoreStatus` or ``None``
        :param status: 
        :type  step_number: :class:`long` or ``None``
        :param step_number: Restore step number format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  value: :class:`str` or ``None``
        :param value: Restore step value
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.description = description
        self.status = status
        self.step_number = step_number
        self.value = value
        VapiStruct.__init__(self)


RestoreStep._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.restore_step', {
        'description': type.OptionalType(type.StringType()),
        'status': type.OptionalType(type.ReferenceType(__name__, 'PerStepRestoreStatus')),
        'step_number': type.OptionalType(type.IntegerType()),
        'value': type.OptionalType(type.StringType()),
    },
    RestoreStep,
    False,
    None))



class RevisionedResource(VapiStruct):
    """
    A base class for types that track revisions

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        VapiStruct.__init__(self)


RevisionedResource._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.revisioned_resource', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
    },
    RevisionedResource,
    False,
    None))



class Role(VapiStruct):
    """
    Role

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'role': 'role',
                            'role_display_name': 'role_display_name',
                            }

    def __init__(self,
                 role=None,
                 role_display_name=None,
                ):
        """
        :type  role: :class:`str` or ``None``
        :param role: Short identifier for the role. Must be all lower case with no
            spaces.
        :type  role_display_name: :class:`str` or ``None``
        :param role_display_name: A short, human-friendly display name of the role.
        """
        self.role = role
        self.role_display_name = role_display_name
        VapiStruct.__init__(self)


Role._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.role', {
        'role': type.OptionalType(type.StringType()),
        'role_display_name': type.OptionalType(type.StringType()),
    },
    Role,
    False,
    None))



class RoleBinding(VapiStruct):
    """
    User/Group's role binding

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    IDENTITY_SOURCE_TYPE_VIDM = "VIDM"
    """


    """
    IDENTITY_SOURCE_TYPE_LDAP = "LDAP"
    """


    """
    STALE_TRUE = "TRUE"
    """


    """
    STALE_FALSE = "FALSE"
    """


    """
    STALE_UNKNOWN = "UNKNOWN"
    """


    """
    TYPE_REMOTE_USER = "remote_user"
    """


    """
    TYPE_REMOTE_GROUP = "remote_group"
    """


    """
    TYPE_LOCAL_USER = "local_user"
    """


    """
    TYPE_PRINCIPAL_IDENTITY = "principal_identity"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'identity_source_id': 'identity_source_id',
                            'identity_source_type': 'identity_source_type',
                            'name': 'name',
                            'roles': 'roles',
                            'stale': 'stale',
                            'type': 'type',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 identity_source_id=None,
                 identity_source_type=None,
                 name=None,
                 roles=None,
                 stale=None,
                 type=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  identity_source_id: :class:`str` or ``None``
        :param identity_source_id: The ID of the external identity source that holds the referenced
            external entity. Currently, only external LDAP servers are allowed.
        :type  identity_source_type: :class:`str` or ``None``
        :param identity_source_type: Possible values are: 
            
            * :attr:`RoleBinding.IDENTITY_SOURCE_TYPE_VIDM`
            * :attr:`RoleBinding.IDENTITY_SOURCE_TYPE_LDAP`
            
             Identity source type
        :type  name: :class:`str` or ``None``
        :param name: User/Group's name
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  roles: :class:`list` of :class:`Role` or ``None``
        :param roles: Roles
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  stale: :class:`str` or ``None``
        :param stale: Possible values are: 
            
            * :attr:`RoleBinding.STALE_TRUE`
            * :attr:`RoleBinding.STALE_FALSE`
            * :attr:`RoleBinding.STALE_UNKNOWN`
            
            Property 'stale' can be considered to have these values - absent -
            This type of rolebinding does not support stale property TRUE -
            Rolebinding is stale in vIDM meaning the user is no longer present
            in vIDM FALSE - Rolebinding is available in vIDM UNKNOWN -
            Rolebinding's state of staleness in unknown Once rolebindings
            become stale, they can be deleted using the API POST
            /aaa/role-bindings?action=delete_stale_bindings
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  type: :class:`str` or ``None``
        :param type: Possible values are: 
            
            * :attr:`RoleBinding.TYPE_REMOTE_USER`
            * :attr:`RoleBinding.TYPE_REMOTE_GROUP`
            * :attr:`RoleBinding.TYPE_LOCAL_USER`
            * :attr:`RoleBinding.TYPE_PRINCIPAL_IDENTITY`
            
             Type
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.identity_source_id = identity_source_id
        self.identity_source_type = identity_source_type
        self.name = name
        self.roles = roles
        self.stale = stale
        self.type = type
        VapiStruct.__init__(self)


RoleBinding._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.role_binding', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'identity_source_id': type.OptionalType(type.StringType()),
        'identity_source_type': type.OptionalType(type.StringType()),
        'name': type.OptionalType(type.StringType()),
        'roles': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Role'))),
        'stale': type.OptionalType(type.StringType()),
        'type': type.OptionalType(type.StringType()),
    },
    RoleBinding,
    False,
    None))



class RoleBindingListResult(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`RoleBinding` or ``None``
        :param results: List results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


RoleBindingListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.role_binding_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'RoleBinding'))),
    },
    RoleBindingListResult,
    False,
    None))



class RoleListResult(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`Role` or ``None``
        :param results: List results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


RoleListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.role_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Role'))),
    },
    RoleListResult,
    False,
    None))



class RoleWithFeatures(VapiStruct):
    """
    Role

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'features': 'features',
                            'role': 'role',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 features=None,
                 role=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  features: :class:`list` of :class:`FeaturePermission` or ``None``
        :param features: Features
        :type  role: :class:`str` or ``None``
        :param role: Short identifier for the role. Must be all lower case with no
            spaces.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.features = features
        self.role = role
        VapiStruct.__init__(self)


RoleWithFeatures._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.role_with_features', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'features': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'FeaturePermission'))),
        'role': type.OptionalType(type.StringType()),
    },
    RoleWithFeatures,
    False,
    None))



class RoleWithFeaturesListResult(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`RoleWithFeatures` or ``None``
        :param results: List results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


RoleWithFeaturesListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.role_with_features_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'RoleWithFeatures'))),
    },
    RoleWithFeaturesListResult,
    False,
    None))



class RouteAdvertisementRule(VapiStruct):
    """
    Route advertisement rules and filtering

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    ACTION_PERMIT = "PERMIT"
    """


    """
    ACTION_DENY = "DENY"
    """


    """
    PREFIX_OPERATOR_GE = "GE"
    """


    """
    PREFIX_OPERATOR_EQ = "EQ"
    """


    """
    ROUTE_ADVERTISEMENT_TYPES_STATIC_ROUTES = "TIER1_STATIC_ROUTES"
    """


    """
    ROUTE_ADVERTISEMENT_TYPES_CONNECTED = "TIER1_CONNECTED"
    """


    """
    ROUTE_ADVERTISEMENT_TYPES_NAT = "TIER1_NAT"
    """


    """
    ROUTE_ADVERTISEMENT_TYPES_LB_VIP = "TIER1_LB_VIP"
    """


    """
    ROUTE_ADVERTISEMENT_TYPES_LB_SNAT = "TIER1_LB_SNAT"
    """


    """
    ROUTE_ADVERTISEMENT_TYPES_DNS_FORWARDER_IP = "TIER1_DNS_FORWARDER_IP"
    """


    """
    ROUTE_ADVERTISEMENT_TYPES_IPSEC_LOCAL_ENDPOINT = "TIER1_IPSEC_LOCAL_ENDPOINT"
    """


    """



    _canonical_to_pep_names = {
                            'action': 'action',
                            'name': 'name',
                            'prefix_operator': 'prefix_operator',
                            'route_advertisement_types': 'route_advertisement_types',
                            'subnets': 'subnets',
                            }

    def __init__(self,
                 action=None,
                 name=None,
                 prefix_operator=None,
                 route_advertisement_types=None,
                 subnets=None,
                ):
        """
        :type  action: :class:`str` or ``None``
        :param action: Possible values are: 
            
            * :attr:`RouteAdvertisementRule.ACTION_PERMIT`
            * :attr:`RouteAdvertisementRule.ACTION_DENY`
            
            Action to advertise filtered routes to the connected Tier0 gateway.
            PERMIT: Enables the advertisment DENY: Disables the advertisement
        :type  name: :class:`str` or ``None``
        :param name: Display name should be unique.
        :type  prefix_operator: :class:`str` or ``None``
        :param prefix_operator: Possible values are: 
            
            * :attr:`RouteAdvertisementRule.PREFIX_OPERATOR_GE`
            * :attr:`RouteAdvertisementRule.PREFIX_OPERATOR_EQ`
            
            Prefix operator to filter subnets. GE prefix operator filters all
            the routes with prefix length greater than or equal to the subnets
            configured. EQ prefix operator filter all the routes with prefix
            length equal to the subnets configured.
        :type  route_advertisement_types: :class:`list` of :class:`str` or ``None``
        :param route_advertisement_types: Possible values are: 
            
            *
              :attr:`RouteAdvertisementRule.ROUTE_ADVERTISEMENT_TYPES_STATIC_ROUTES`
            *
              :attr:`RouteAdvertisementRule.ROUTE_ADVERTISEMENT_TYPES_CONNECTED`
            * :attr:`RouteAdvertisementRule.ROUTE_ADVERTISEMENT_TYPES_NAT`
            * :attr:`RouteAdvertisementRule.ROUTE_ADVERTISEMENT_TYPES_LB_VIP`
            * :attr:`RouteAdvertisementRule.ROUTE_ADVERTISEMENT_TYPES_LB_SNAT`
            *
              :attr:`RouteAdvertisementRule.ROUTE_ADVERTISEMENT_TYPES_DNS_FORWARDER_IP`
            *
              :attr:`RouteAdvertisementRule.ROUTE_ADVERTISEMENT_TYPES_IPSEC_LOCAL_ENDPOINT`
            
            Enable different types of route advertisements. When not specified,
            routes to IPSec VPN local-endpoint subnets
            (TIER1_IPSEC_LOCAL_ENDPOINT) are automatically advertised.
        :type  subnets: :class:`list` of :class:`str` or ``None``
        :param subnets: Network CIDRs to be routed. format: ip-cidr-block
        """
        self.action = action
        self.name = name
        self.prefix_operator = prefix_operator
        self.route_advertisement_types = route_advertisement_types
        self.subnets = subnets
        VapiStruct.__init__(self)


RouteAdvertisementRule._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.route_advertisement_rule', {
        'action': type.OptionalType(type.StringType()),
        'name': type.OptionalType(type.StringType()),
        'prefix_operator': type.OptionalType(type.StringType()),
        'route_advertisement_types': type.OptionalType(type.ListType(type.StringType())),
        'subnets': type.OptionalType(type.ListType(type.StringType())),
    },
    RouteAdvertisementRule,
    False,
    None))



class RouteAggregationEntry(VapiStruct):
    """
    List of routes to be aggregated

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'prefix': 'prefix',
                            'summary_only': 'summary_only',
                            }

    def __init__(self,
                 prefix=None,
                 summary_only=None,
                ):
        """
        :type  prefix: :class:`str` or ``None``
        :param prefix: CIDR of aggregate address format: ip-cidr-block
        :type  summary_only: :class:`bool` or ``None``
        :param summary_only: Send only summarized route. Summarization reduces number of routes
            advertised by representing multiple related routes with prefix
            property.
        """
        self.prefix = prefix
        self.summary_only = summary_only
        VapiStruct.__init__(self)


RouteAggregationEntry._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.route_aggregation_entry', {
        'prefix': type.OptionalType(type.StringType()),
        'summary_only': type.OptionalType(type.BooleanType()),
    },
    RouteAggregationEntry,
    False,
    None))



class RouteBasedIPSecVpnSession(VapiStruct):
    """
    A Route Based VPN is more flexible, more powerful and recommended over
    policy based VPN. IP Tunnel port is created and all traffic routed via
    tunnel port is protected. Routes can be configured statically or can be
    learned through BGP. A route based VPN is must for establishing redundant
    VPN session to remote site.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "RouteBasedIPSecVpnSession"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'force_whitelisting': 'force_whitelisting',
                            'tunnel_interfaces': 'tunnel_interfaces',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'authentication_mode': 'authentication_mode',
                            'compliance_suite': 'compliance_suite',
                            'connection_initiation_mode': 'connection_initiation_mode',
                            'dpd_profile_path': 'dpd_profile_path',
                            'enabled': 'enabled',
                            'ike_profile_path': 'ike_profile_path',
                            'local_endpoint_path': 'local_endpoint_path',
                            'peer_address': 'peer_address',
                            'peer_id': 'peer_id',
                            'psk': 'psk',
                            'tcp_mss_clamping': 'tcp_mss_clamping',
                            'tunnel_profile_path': 'tunnel_profile_path',
                            }

    def __init__(self,
                 force_whitelisting=None,
                 tunnel_interfaces=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='RouteBasedIPSecVpnSession',
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 authentication_mode=None,
                 compliance_suite=None,
                 connection_initiation_mode=None,
                 dpd_profile_path=None,
                 enabled=None,
                 ike_profile_path=None,
                 local_endpoint_path=None,
                 peer_address=None,
                 peer_id=None,
                 psk=None,
                 tcp_mss_clamping=None,
                 tunnel_profile_path=None,
                ):
        """
        :type  force_whitelisting: :class:`bool` or ``None``
        :param force_whitelisting: If true the default firewall rule Action is set to DROP, otherwise
            set to ALLOW. This filed is deprecated and recommended to change
            Rule action filed. Note that this filed is not synchornied with
            default rule field.
        :type  tunnel_interfaces: :class:`list` of :class:`IPSecVpnTunnelInterface` or ``None``
        :param tunnel_interfaces: IP Tunnel interfaces.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`IPSecVpnSession.RESOURCE_TYPE_POLICYBASEDIPSECVPNSESSION`
            * :attr:`IPSecVpnSession.RESOURCE_TYPE_ROUTEBASEDIPSECVPNSESSION`
            
            A Policy Based VPN requires to define protect rules that match
            local and peer subnets. IPSec security associations is negotiated
            for each pair of local and peer subnet. A Route Based VPN is more
            flexible, more powerful and recommended over policy based VPN. IP
            Tunnel port is created and all traffic routed via tunnel port is
            protected. Routes can be configured statically or can be learned
            through BGP. A route based VPN is must for establishing redundant
            VPN session to remote site.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  authentication_mode: :class:`str` or ``None``
        :param authentication_mode: Possible values are: 
            
            * :attr:`IPSecVpnSession.AUTHENTICATION_MODE_PSK`
            * :attr:`IPSecVpnSession.AUTHENTICATION_MODE_CERTIFICATE`
            
            Peer authentication mode. PSK - In this mode a secret key shared
            between local and peer sites is to be used for authentication. The
            secret key can be a string with a maximum length of 128 characters.
            CERTIFICATE - In this mode a certificate defined at the global
            level is to be used for authentication.
        :type  compliance_suite: :class:`str` or ``None``
        :param compliance_suite: Possible values are: 
            
            * :attr:`IPSecVpnSession.COMPLIANCE_SUITE_CNSA`
            * :attr:`IPSecVpnSession.COMPLIANCE_SUITE_SUITE_B_GCM_128`
            * :attr:`IPSecVpnSession.COMPLIANCE_SUITE_SUITE_B_GCM_256`
            * :attr:`IPSecVpnSession.COMPLIANCE_SUITE_PRIME`
            * :attr:`IPSecVpnSession.COMPLIANCE_SUITE_FOUNDATION`
            * :attr:`IPSecVpnSession.COMPLIANCE_SUITE_FIPS`
            * :attr:`IPSecVpnSession.COMPLIANCE_SUITE_NONE`
            
             Compliance suite.
        :type  connection_initiation_mode: :class:`str` or ``None``
        :param connection_initiation_mode: Possible values are: 
            
            * :attr:`IPSecVpnSession.CONNECTION_INITIATION_MODE_INITIATOR`
            * :attr:`IPSecVpnSession.CONNECTION_INITIATION_MODE_RESPOND_ONLY`
            * :attr:`IPSecVpnSession.CONNECTION_INITIATION_MODE_ON_DEMAND`
            
            Connection initiation mode used by local endpoint to establish ike
            connection with peer site. INITIATOR - In this mode local endpoint
            initiates tunnel setup and will also respond to incoming tunnel
            setup requests from peer gateway. RESPOND_ONLY - In this mode,
            local endpoint shall only respond to incoming tunnel setup
            requests. It shall not initiate the tunnel setup. ON_DEMAND - In
            this mode local endpoint will initiate tunnel creation once first
            packet matching the policy rule is received and will also respond
            to incoming initiation request.
        :type  dpd_profile_path: :class:`str` or ``None``
        :param dpd_profile_path: Policy path referencing Dead Peer Detection (DPD) profile. Default
            is set to system default profile.
        :type  enabled: :class:`bool` or ``None``
        :param enabled: Enable/Disable IPSec VPN session.
        :type  ike_profile_path: :class:`str` or ``None``
        :param ike_profile_path: Policy path referencing IKE profile to be used. Default is set
            according to system default profile.
        :type  local_endpoint_path: :class:`str` or ``None``
        :param local_endpoint_path: Policy path referencing Local endpoint.
        :type  peer_address: :class:`str` or ``None``
        :param peer_address: Public IPV4 address of the remote device terminating the VPN
            connection.
        :type  peer_id: :class:`str` or ``None``
        :param peer_id: Peer ID to uniquely identify the peer site. The peer ID is the
            public IP address of the remote device terminating the VPN tunnel.
            When NAT is configured for the peer, enter the private IP address
            of the peer.
        :type  psk: :class:`str` or ``None``
        :param psk: IPSec Pre-shared key. Maximum length of this field is 128
            characters.
        :type  tcp_mss_clamping: :class:`TcpMaximumSegmentSizeClamping` or ``None``
        :param tcp_mss_clamping: TCP Maximum Segment Size Clamping Direction and Value.
        :type  tunnel_profile_path: :class:`str` or ``None``
        :param tunnel_profile_path: Policy path referencing Tunnel profile to be used. Default is set
            to system default profile.
        """
        self.force_whitelisting = force_whitelisting
        self.tunnel_interfaces = tunnel_interfaces
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.authentication_mode = authentication_mode
        self.compliance_suite = compliance_suite
        self.connection_initiation_mode = connection_initiation_mode
        self.dpd_profile_path = dpd_profile_path
        self.enabled = enabled
        self.ike_profile_path = ike_profile_path
        self.local_endpoint_path = local_endpoint_path
        self.peer_address = peer_address
        self.peer_id = peer_id
        self.psk = psk
        self.tcp_mss_clamping = tcp_mss_clamping
        self.tunnel_profile_path = tunnel_profile_path
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

RouteBasedIPSecVpnSession._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.route_based_IP_sec_vpn_session', {
        'force_whitelisting': type.OptionalType(type.BooleanType()),
        'tunnel_interfaces': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'IPSecVpnTunnelInterface'))),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'authentication_mode': type.OptionalType(type.StringType()),
        'compliance_suite': type.OptionalType(type.StringType()),
        'connection_initiation_mode': type.OptionalType(type.StringType()),
        'dpd_profile_path': type.OptionalType(type.StringType()),
        'enabled': type.OptionalType(type.BooleanType()),
        'ike_profile_path': type.OptionalType(type.StringType()),
        'local_endpoint_path': type.OptionalType(type.StringType()),
        'peer_address': type.OptionalType(type.StringType()),
        'peer_id': type.OptionalType(type.StringType()),
        'psk': type.OptionalType(type.StringType()),
        'tcp_mss_clamping': type.OptionalType(type.ReferenceType(__name__, 'TcpMaximumSegmentSizeClamping')),
        'tunnel_profile_path': type.OptionalType(type.StringType()),
    },
    RouteBasedIPSecVpnSession,
    False,
    None))



class RouteBasedL3VpnSession(VapiStruct):
    """
    A Route Based L3Vpn is more flexible, more powerful and recommended over
    policy based. IP Tunnel subnet is created and all traffic routed through
    tunnel subnet is sent over tunnel. Routes can be learned through BGP. A
    route based L3Vpn is required when using redundant L3Vpn.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "RouteBasedL3VpnSession"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'default_rule_logging': 'default_rule_logging',
                            'force_whitelisting': 'force_whitelisting',
                            'routing_config_path': 'routing_config_path',
                            'tunnel_subnets': 'tunnel_subnets',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 default_rule_logging=None,
                 force_whitelisting=None,
                 routing_config_path=None,
                 tunnel_subnets=None,
                 resource_type='RouteBasedL3VpnSession',
                ):
        """
        :type  default_rule_logging: :class:`bool` or ``None``
        :param default_rule_logging: Indicates if logging should be enabled for the default whitelisting
            rule for the VTI interface.
        :type  force_whitelisting: :class:`bool` or ``None``
        :param force_whitelisting: The default firewall rule Action is set to DROP if true otherwise
            set to ALLOW.
        :type  routing_config_path: :class:`str` or ``None``
        :param routing_config_path: This is a deprecated field. Any specified value is not saved and
            will be ignored.
        :type  tunnel_subnets: :class:`list` of :class:`TunnelSubnet` or ``None``
        :param tunnel_subnets: Virtual tunnel interface (VTI) port IP subnets to be used to
            configure route-based L3Vpn session. A max of one tunnel subnet is
            allowed.
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`L3VpnSession.RESOURCE_TYPE_POLICYBASEDL3VPNSESSION`
            * :attr:`L3VpnSession.RESOURCE_TYPE_ROUTEBASEDL3VPNSESSION`
            
            - A Policy Based L3Vpn is a configuration in which protect rules to
            match local and remote subnet needs to be defined. Tunnel is
            established for each pair of local and remote subnet defined in
            protect rules. - A Route Based L3Vpn is more flexible, more
            powerful and recommended over policy based. IP Tunnel subnet is
            created and all traffic routed through tunnel subnet (commonly
            known as VTI) is sent over tunnel. Routes can be learned through
            BGP. A route based L3Vpn is required when using redundant L3Vpn.
        """
        self.default_rule_logging = default_rule_logging
        self.force_whitelisting = force_whitelisting
        self.routing_config_path = routing_config_path
        self.tunnel_subnets = tunnel_subnets
        self._resource_type = resource_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

RouteBasedL3VpnSession._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.route_based_l3_vpn_session', {
        'default_rule_logging': type.OptionalType(type.BooleanType()),
        'force_whitelisting': type.OptionalType(type.BooleanType()),
        'routing_config_path': type.OptionalType(type.StringType()),
        'tunnel_subnets': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'TunnelSubnet'))),
        'resource_type': type.StringType(),
    },
    RouteBasedL3VpnSession,
    False,
    None))



class RouteDetails(VapiStruct):
    """
    BGP route details.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'as_path': 'as_path',
                            'local_pref': 'local_pref',
                            'med': 'med',
                            'network': 'network',
                            'next_hop': 'next_hop',
                            'weight': 'weight',
                            }

    def __init__(self,
                 as_path=None,
                 local_pref=None,
                 med=None,
                 network=None,
                 next_hop=None,
                 weight=None,
                ):
        """
        :type  as_path: :class:`str` or ``None``
        :param as_path: BGP AS path attribute.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  local_pref: :class:`long` or ``None``
        :param local_pref: BGP Local Preference attribute. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  med: :class:`long` or ``None``
        :param med: BGP Multi Exit Discriminator attribute. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  network: :class:`str` or ``None``
        :param network: CIDR network address. format: ip-cidr-block
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  next_hop: :class:`str` or ``None``
        :param next_hop: Next hop IP address. format: ip
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  weight: :class:`long` or ``None``
        :param weight: BGP Weight attribute. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.as_path = as_path
        self.local_pref = local_pref
        self.med = med
        self.network = network
        self.next_hop = next_hop
        self.weight = weight
        VapiStruct.__init__(self)


RouteDetails._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.route_details', {
        'as_path': type.OptionalType(type.StringType()),
        'local_pref': type.OptionalType(type.IntegerType()),
        'med': type.OptionalType(type.IntegerType()),
        'network': type.OptionalType(type.StringType()),
        'next_hop': type.OptionalType(type.StringType()),
        'weight': type.OptionalType(type.IntegerType()),
    },
    RouteDetails,
    False,
    None))



class RouteMapEntry(VapiStruct):
    """
    Route map entry

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    ACTION_PERMIT = "PERMIT"
    """


    """
    ACTION_DENY = "DENY"
    """


    """



    _canonical_to_pep_names = {
                            'action': 'action',
                            'community_list_matches': 'community_list_matches',
                            'prefix_list_matches': 'prefix_list_matches',
                            'set': 'set',
                            }

    def __init__(self,
                 action=None,
                 community_list_matches=None,
                 prefix_list_matches=None,
                 set=None,
                ):
        """
        :type  action: :class:`str` or ``None``
        :param action: Possible values are: 
            
            * :attr:`RouteMapEntry.ACTION_PERMIT`
            * :attr:`RouteMapEntry.ACTION_DENY`
            
             Action for the route map entry
        :type  community_list_matches: :class:`list` of :class:`CommunityMatchCriteria` or ``None``
        :param community_list_matches: Community list match criteria for route map. Properties
            community_list_matches and prefix_list_matches are mutually
            exclusive and cannot be used in the same route map entry.
        :type  prefix_list_matches: :class:`list` of :class:`str` or ``None``
        :param prefix_list_matches: Prefix list match criteria for route map. Properties
            community_list_matches and prefix_list_matches are mutually
            exclusive and cannot be used in the same route map entry.
        :type  set: :class:`RouteMapEntrySet` or ``None``
        :param set: Set criteria for route map entry
        """
        self.action = action
        self.community_list_matches = community_list_matches
        self.prefix_list_matches = prefix_list_matches
        self.set = set
        VapiStruct.__init__(self)


RouteMapEntry._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.route_map_entry', {
        'action': type.OptionalType(type.StringType()),
        'community_list_matches': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'CommunityMatchCriteria'))),
        'prefix_list_matches': type.OptionalType(type.ListType(type.StringType())),
        'set': type.OptionalType(type.ReferenceType(__name__, 'RouteMapEntrySet')),
    },
    RouteMapEntry,
    False,
    None))



class RouteMapEntrySet(VapiStruct):
    """
    Set criteria for route map entry

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'as_path_prepend': 'as_path_prepend',
                            'community': 'community',
                            'local_preference': 'local_preference',
                            'med': 'med',
                            'prefer_global_v6_next_hop': 'prefer_global_v6_next_hop',
                            'weight': 'weight',
                            }

    def __init__(self,
                 as_path_prepend=None,
                 community=None,
                 local_preference=None,
                 med=None,
                 prefer_global_v6_next_hop=None,
                 weight=None,
                ):
        """
        :type  as_path_prepend: :class:`str` or ``None``
        :param as_path_prepend: AS path prepend to influence route selection.
        :type  community: :class:`str` or ``None``
        :param community: Set BGP regular or large community for matching routes. A maximum
            of one value for each community type separated by space. Well-known
            community name, community value in aa:nn (2byte:2byte) format for
            regular community and community value in aa:bb:nn
            (4byte:4byte:4byte) format for large community are supported.
        :type  local_preference: :class:`long` or ``None``
        :param local_preference: Local preference indicates the degree of preference for one BGP
            route over other BGP routes. The path with highest local preference
            is preferred. format: int64
        :type  med: :class:`long` or ``None``
        :param med: Multi exit descriminator (MED) is a hint to BGP neighbors about the
            preferred path into an autonomous system (AS) that has multiple
            entry points. A lower MED value is preferred over a higher value.
            format: int32
        :type  prefer_global_v6_next_hop: :class:`bool` or ``None``
        :param prefer_global_v6_next_hop: For incoming and import route_maps on receiving both v6 global and
            v6 link-local address for the route, prefer to use the global
            address as the next hop. By default, it prefers the link-local next
            hop.
        :type  weight: :class:`long` or ``None``
        :param weight: Weight is used to select a route when multiple routes are available
            to the same network. Route with the highest weight is preferred.
            format: int32
        """
        self.as_path_prepend = as_path_prepend
        self.community = community
        self.local_preference = local_preference
        self.med = med
        self.prefer_global_v6_next_hop = prefer_global_v6_next_hop
        self.weight = weight
        VapiStruct.__init__(self)


RouteMapEntrySet._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.route_map_entry_set', {
        'as_path_prepend': type.OptionalType(type.StringType()),
        'community': type.OptionalType(type.StringType()),
        'local_preference': type.OptionalType(type.IntegerType()),
        'med': type.OptionalType(type.IntegerType()),
        'prefer_global_v6_next_hop': type.OptionalType(type.BooleanType()),
        'weight': type.OptionalType(type.IntegerType()),
    },
    RouteMapEntrySet,
    False,
    None))



class RouterNexthop(VapiStruct):
    """
    Next hop configuration for network

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'admin_distance': 'admin_distance',
                            'ip_address': 'ip_address',
                            'scope': 'scope',
                            }

    def __init__(self,
                 admin_distance=None,
                 ip_address=None,
                 scope=None,
                ):
        """
        :type  admin_distance: :class:`long` or ``None``
        :param admin_distance: Cost associated with next hop route format: int32
        :type  ip_address: :class:`str` or ``None``
        :param ip_address: Next hop gateway IP address format: ip
        :type  scope: :class:`list` of :class:`str` or ``None``
        :param scope: Interface path associated with current route. For example: specify
            a policy path referencing the IPSec VPN Session.
        """
        self.admin_distance = admin_distance
        self.ip_address = ip_address
        self.scope = scope
        VapiStruct.__init__(self)


RouterNexthop._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.router_nexthop', {
        'admin_distance': type.OptionalType(type.IntegerType()),
        'ip_address': type.OptionalType(type.StringType()),
        'scope': type.OptionalType(type.ListType(type.StringType())),
    },
    RouterNexthop,
    False,
    None))



class RoutesPerTransportNode(VapiStruct):
    """
    BGP routes per transport node.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'routes': 'routes',
                            'source_address': 'source_address',
                            'transport_node_id': 'transport_node_id',
                            }

    def __init__(self,
                 routes=None,
                 source_address=None,
                 transport_node_id=None,
                ):
        """
        :type  routes: :class:`list` of :class:`RouteDetails` or ``None``
        :param routes: Array of BGP neighbor route details for this transport node.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  source_address: :class:`str` or ``None``
        :param source_address: BGP neighbor source address. format: ip
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  transport_node_id: :class:`str` or ``None``
        :param transport_node_id: Transport node id
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.routes = routes
        self.source_address = source_address
        self.transport_node_id = transport_node_id
        VapiStruct.__init__(self)


RoutesPerTransportNode._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.routes_per_transport_node', {
        'routes': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'RouteDetails'))),
        'source_address': type.OptionalType(type.StringType()),
        'transport_node_id': type.OptionalType(type.StringType()),
    },
    RoutesPerTransportNode,
    False,
    None))



class RoutingEntry(VapiStruct):
    """
    Routing table entry.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'admin_distance': 'admin_distance',
                            'interface': '_interface',
                            'lr_component_id': 'lr_component_id',
                            'lr_component_type': 'lr_component_type',
                            'network': 'network',
                            'next_hop': 'next_hop',
                            'route_type': 'route_type',
                            }

    def __init__(self,
                 admin_distance=None,
                 _interface=None,
                 lr_component_id=None,
                 lr_component_type=None,
                 network=None,
                 next_hop=None,
                 route_type=None,
                ):
        """
        :type  admin_distance: :class:`long` or ``None``
        :param admin_distance: Admin distance. format: int32
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  _interface: :class:`str` or ``None``
        :param _interface: The policy path of the interface which is used as the next hop
        :type  lr_component_id: :class:`str` or ``None``
        :param lr_component_id: Logical router component(Service Router/Distributed Router) id
        :type  lr_component_type: :class:`str` or ``None``
        :param lr_component_type: Logical router component(Service Router/Distributed Router) type
        :type  network: :class:`str` or ``None``
        :param network: Network CIDR.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  next_hop: :class:`str` or ``None``
        :param next_hop: Next hop address. format: ip
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  route_type: :class:`str` or ``None``
        :param route_type: Network address CIDR.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.admin_distance = admin_distance
        self._interface = _interface
        self.lr_component_id = lr_component_id
        self.lr_component_type = lr_component_type
        self.network = network
        self.next_hop = next_hop
        self.route_type = route_type
        VapiStruct.__init__(self)


RoutingEntry._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.routing_entry', {
        'admin_distance': type.OptionalType(type.IntegerType()),
        'interface': type.OptionalType(type.StringType()),
        'lr_component_id': type.OptionalType(type.StringType()),
        'lr_component_type': type.OptionalType(type.StringType()),
        'network': type.OptionalType(type.StringType()),
        'next_hop': type.OptionalType(type.StringType()),
        'route_type': type.OptionalType(type.StringType()),
    },
    RoutingEntry,
    False,
    None))



class RoutingTable(VapiStruct):
    """
    Routing table.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'count': 'count',
                            'edge_node': 'edge_node',
                            'route_entries': 'route_entries',
                            }

    def __init__(self,
                 count=None,
                 edge_node=None,
                 route_entries=None,
                ):
        """
        :type  count: :class:`long` or ``None``
        :param count: Entry count. format: int32
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  edge_node: :class:`str` or ``None``
        :param edge_node: Transport node ID.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  route_entries: :class:`list` of :class:`RoutingEntry` or ``None``
        :param route_entries: Route entries.
        """
        self.count = count
        self.edge_node = edge_node
        self.route_entries = route_entries
        VapiStruct.__init__(self)


RoutingTable._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.routing_table', {
        'count': type.OptionalType(type.IntegerType()),
        'edge_node': type.OptionalType(type.StringType()),
        'route_entries': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'RoutingEntry'))),
    },
    RoutingTable,
    False,
    None))



class RoutingTableListResult(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`RoutingTable` or ``None``
        :param results: Paged Collection of Routes per transport node ID.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


RoutingTableListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.routing_table_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'RoutingTable'))),
    },
    RoutingTableListResult,
    False,
    None))



class RowListField(VapiStruct):
    """
    Root of the api result set for forming rows.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'alias': 'alias',
                            'path': 'path',
                            }

    def __init__(self,
                 alias=None,
                 path=None,
                ):
        """
        :type  alias: :class:`str` or ``None``
        :param alias: 
        :type  path: :class:`str` or ``None``
        :param path: JSON path to the root of the api result set for forming rows.
        """
        self.alias = alias
        self.path = path
        VapiStruct.__init__(self)


RowListField._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.row_list_field', {
        'alias': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
    },
    RowListField,
    False,
    None))



class Rule(VapiStruct):
    """
    A rule indicates the action to be performed for various types of traffic
    flowing between workload groups.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    DIRECTION_IN = "IN"
    """


    """
    DIRECTION_OUT = "OUT"
    """


    """
    DIRECTION_IN_OUT = "IN_OUT"
    """


    """
    IP_PROTOCOL_IPV4 = "IPV4"
    """


    """
    IP_PROTOCOL_IPV6 = "IPV6"
    """


    """
    IP_PROTOCOL_IPV4_IPV6 = "IPV4_IPV6"
    """


    """
    ACTION_ALLOW = "ALLOW"
    """


    """
    ACTION_DROP = "DROP"
    """


    """
    ACTION_REJECT = "REJECT"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'destination_groups': 'destination_groups',
                            'destinations_excluded': 'destinations_excluded',
                            'direction': 'direction',
                            'disabled': 'disabled',
                            'ip_protocol': 'ip_protocol',
                            'is_default': 'is_default',
                            'logged': 'logged',
                            'notes': 'notes',
                            'profiles': 'profiles',
                            'rule_id': 'rule_id',
                            'scope': 'scope',
                            'sequence_number': 'sequence_number',
                            'service_entries': 'service_entries',
                            'services': 'services',
                            'source_groups': 'source_groups',
                            'sources_excluded': 'sources_excluded',
                            'tag': 'tag',
                            'action': 'action',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 destination_groups=None,
                 destinations_excluded=None,
                 direction=None,
                 disabled=None,
                 ip_protocol=None,
                 is_default=None,
                 logged=None,
                 notes=None,
                 profiles=None,
                 rule_id=None,
                 scope=None,
                 sequence_number=None,
                 service_entries=None,
                 services=None,
                 source_groups=None,
                 sources_excluded=None,
                 tag=None,
                 action=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  destination_groups: :class:`list` of :class:`str` or ``None``
        :param destination_groups: We need paths as duplicate names may exist for groups under
            different domains. Along with paths we support IP Address of type
            IPv4 and IPv6. IP Address can be in one of the format(CIDR, IP
            Address, Range of IP Address). In order to specify all groups, use
            the constant \"ANY\". This is case insensitive. If \"ANY\" is used,
            it should be the ONLY element in the group array. Error will be
            thrown if ANY is used in conjunction with other values.
        :type  destinations_excluded: :class:`bool` or ``None``
        :param destinations_excluded: If set to true, the rule gets applied on all the groups that are
            NOT part of the destination groups. If false, the rule applies to
            the destination groups
        :type  direction: :class:`str` or ``None``
        :param direction: Possible values are: 
            
            * :attr:`Rule.DIRECTION_IN`
            * :attr:`Rule.DIRECTION_OUT`
            * :attr:`Rule.DIRECTION_IN_OUT`
            
             Define direction of traffic.
        :type  disabled: :class:`bool` or ``None``
        :param disabled: Flag to disable the rule. Default is enabled.
        :type  ip_protocol: :class:`str` or ``None``
        :param ip_protocol: Possible values are: 
            
            * :attr:`Rule.IP_PROTOCOL_IPV4`
            * :attr:`Rule.IP_PROTOCOL_IPV6`
            * :attr:`Rule.IP_PROTOCOL_IPV4_IPV6`
            
            Type of IP packet that should be matched while enforcing the rule.
            The value is set to IPV4_IPV6 for Layer3 rule if not specified. For
            Layer2/Ether rule the value must be null.
        :type  is_default: :class:`bool` or ``None``
        :param is_default: A flag to indicate whether rule is a default rule.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  logged: :class:`bool` or ``None``
        :param logged: Flag to enable packet logging. Default is disabled.
        :type  notes: :class:`str` or ``None``
        :param notes: Text for additional notes on changes.
        :type  profiles: :class:`list` of :class:`str` or ``None``
        :param profiles: Holds the list of layer 7 service profile paths. These profiles
            accept attributes and sub-attributes of various network services
            (e.g. L4 AppId, encryption algorithm, domain name, etc) as key
            value pairs.
        :type  rule_id: :class:`long` or ``None``
        :param rule_id: This is a unique 4 byte positive number that is assigned by the
            system. This rule id is passed all the way down to the data path.
            The first 1GB (1000 to 2^30) will be shared by GM and LM with zebra
            style striped number space. For E.g 1000 to (1Million -1) by LM,
            (1M - 2M-1) by GM and so on. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  scope: :class:`list` of :class:`str` or ``None``
        :param scope: The list of policy paths where the rule is applied
            LR/Edge/T0/T1/LRP etc. Note that a given rule can be applied on
            multiple LRs/LRPs.
        :type  sequence_number: :class:`long` or ``None``
        :param sequence_number: This field is used to resolve conflicts between multiple Rules
            under Security or Gateway Policy for a Domain If no sequence number
            is specified in the payload, a value of 0 is assigned by default.
            If there are multiple rules with the same sequence number then
            their order is not deterministic. If a specific order of rules is
            desired, then one has to specify unique sequence numbers or use the
            POST request on the rule entity with a query parameter
            action=revise to let the framework assign a sequence number format:
            int32
        :type  service_entries: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param service_entries: In order to specify raw services this can be used, along with
            services which contains path to services. This can be empty or
            null.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ServiceEntry`. When methods return a value of this class as
            a return value, the attribute will contain all the attributes
            defined in :class:`ServiceEntry`.
        :type  services: :class:`list` of :class:`str` or ``None``
        :param services: In order to specify all services, use the constant \"ANY\". This is
            case insensitive. If \"ANY\" is used, it should be the ONLY element
            in the services array. Error will be thrown if ANY is used in
            conjunction with other values.
        :type  source_groups: :class:`list` of :class:`str` or ``None``
        :param source_groups: We need paths as duplicate names may exist for groups under
            different domains. Along with paths we support IP Address of type
            IPv4 and IPv6. IP Address can be in one of the format(CIDR, IP
            Address, Range of IP Address). In order to specify all groups, use
            the constant \"ANY\". This is case insensitive. If \"ANY\" is used,
            it should be the ONLY element in the group array. Error will be
            thrown if ANY is used in conjunction with other values.
        :type  sources_excluded: :class:`bool` or ``None``
        :param sources_excluded: If set to true, the rule gets applied on all the groups that are
            NOT part of the source groups. If false, the rule applies to the
            source groups
        :type  tag: :class:`str` or ``None``
        :param tag: User level field which will be printed in CLI and packet logs.
        :type  action: :class:`str` or ``None``
        :param action: Possible values are: 
            
            * :attr:`Rule.ACTION_ALLOW`
            * :attr:`Rule.ACTION_DROP`
            * :attr:`Rule.ACTION_REJECT`
            
             The action to be applied to all the services
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.destination_groups = destination_groups
        self.destinations_excluded = destinations_excluded
        self.direction = direction
        self.disabled = disabled
        self.ip_protocol = ip_protocol
        self.is_default = is_default
        self.logged = logged
        self.notes = notes
        self.profiles = profiles
        self.rule_id = rule_id
        self.scope = scope
        self.sequence_number = sequence_number
        self.service_entries = service_entries
        self.services = services
        self.source_groups = source_groups
        self.sources_excluded = sources_excluded
        self.tag = tag
        self.action = action
        VapiStruct.__init__(self)


Rule._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.rule', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'destination_groups': type.OptionalType(type.ListType(type.StringType())),
        'destinations_excluded': type.OptionalType(type.BooleanType()),
        'direction': type.OptionalType(type.StringType()),
        'disabled': type.OptionalType(type.BooleanType()),
        'ip_protocol': type.OptionalType(type.StringType()),
        'is_default': type.OptionalType(type.BooleanType()),
        'logged': type.OptionalType(type.BooleanType()),
        'notes': type.OptionalType(type.StringType()),
        'profiles': type.OptionalType(type.ListType(type.StringType())),
        'rule_id': type.OptionalType(type.IntegerType()),
        'scope': type.OptionalType(type.ListType(type.StringType())),
        'sequence_number': type.OptionalType(type.IntegerType()),
        'service_entries': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ServiceEntry')]))),
        'services': type.OptionalType(type.ListType(type.StringType())),
        'source_groups': type.OptionalType(type.ListType(type.StringType())),
        'sources_excluded': type.OptionalType(type.BooleanType()),
        'tag': type.OptionalType(type.StringType()),
        'action': type.OptionalType(type.StringType()),
    },
    Rule,
    False,
    None))



class RuleListResult(VapiStruct):
    """
    Paged Collection of Rules

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`Rule` or ``None``
        :param results: Rule list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


RuleListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.rule_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Rule'))),
    },
    RuleListResult,
    False,
    None))



class RuleStatistics(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'byte_count': 'byte_count',
                            'hit_count': 'hit_count',
                            'internal_rule_id': 'internal_rule_id',
                            'lr_path': 'lr_path',
                            'max_popularity_index': 'max_popularity_index',
                            'max_session_count': 'max_session_count',
                            'packet_count': 'packet_count',
                            'popularity_index': 'popularity_index',
                            'rule': 'rule',
                            'session_count': 'session_count',
                            'total_session_count': 'total_session_count',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 byte_count=None,
                 hit_count=None,
                 internal_rule_id=None,
                 lr_path=None,
                 max_popularity_index=None,
                 max_session_count=None,
                 packet_count=None,
                 popularity_index=None,
                 rule=None,
                 session_count=None,
                 total_session_count=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  byte_count: :class:`long` or ``None``
        :param byte_count: Aggregated number of bytes processed by the rule. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  hit_count: :class:`long` or ``None``
        :param hit_count: Aggregated number of hits received by the rule. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  internal_rule_id: :class:`str` or ``None``
        :param internal_rule_id: Realized id of the rule on NSX MP. Policy Manager can create more
            than one rule per policy rule, in which case this identifier helps
            to distinguish between the multple rules created.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  lr_path: :class:`str` or ``None``
        :param lr_path: Path of the LR on which the section is applied in case of Edge FW.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  max_popularity_index: :class:`long` or ``None``
        :param max_popularity_index: Maximum value of popularity index of all rules of the type. This is
            aggregated statistic which are computed with lower frequency
            compared to individual generic rule statistics. It may have a
            computation delay up to 15 minutes in response to this API. format:
            int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  max_session_count: :class:`long` or ``None``
        :param max_session_count: Maximum value of sessions count of all rules of the type. This is
            aggregated statistic which are computed with lower frequency
            compared to generic rule statistics. It may have a computation
            delay up to 15 minutes in response to this API. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  packet_count: :class:`long` or ``None``
        :param packet_count: Aggregated number of packets processed by the rule. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  popularity_index: :class:`long` or ``None``
        :param popularity_index: This is calculated by sessions count divided by age of the rule.
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  rule: :class:`str` or ``None``
        :param rule: Path of the rule.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  session_count: :class:`long` or ``None``
        :param session_count: Aggregated number of sessions processed by the rule. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  total_session_count: :class:`long` or ``None``
        :param total_session_count: Aggregated number of sessions processed by all the rules This is
            aggregated statistic which are computed with lower frequency
            compared to individual generic rule statistics. It may have a
            computation delay up to 15 minutes in response to this API. format:
            int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.byte_count = byte_count
        self.hit_count = hit_count
        self.internal_rule_id = internal_rule_id
        self.lr_path = lr_path
        self.max_popularity_index = max_popularity_index
        self.max_session_count = max_session_count
        self.packet_count = packet_count
        self.popularity_index = popularity_index
        self.rule = rule
        self.session_count = session_count
        self.total_session_count = total_session_count
        VapiStruct.__init__(self)


RuleStatistics._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.rule_statistics', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'byte_count': type.OptionalType(type.IntegerType()),
        'hit_count': type.OptionalType(type.IntegerType()),
        'internal_rule_id': type.OptionalType(type.StringType()),
        'lr_path': type.OptionalType(type.StringType()),
        'max_popularity_index': type.OptionalType(type.IntegerType()),
        'max_session_count': type.OptionalType(type.IntegerType()),
        'packet_count': type.OptionalType(type.IntegerType()),
        'popularity_index': type.OptionalType(type.IntegerType()),
        'rule': type.OptionalType(type.StringType()),
        'session_count': type.OptionalType(type.IntegerType()),
        'total_session_count': type.OptionalType(type.IntegerType()),
    },
    RuleStatistics,
    False,
    None))



class RuleStatisticsForEnforcementPoint(VapiStruct):
    """
    Rule statistics for a specfic enforcement point.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'enforcement_point': 'enforcement_point',
                            'statistics': 'statistics',
                            }

    def __init__(self,
                 enforcement_point=None,
                 statistics=None,
                ):
        """
        :type  enforcement_point: :class:`str` or ``None``
        :param enforcement_point: Rule statistics for a single enforcement point
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  statistics: :class:`RuleStatistics` or ``None``
        :param statistics: Statistics for the specified enforcement point
        """
        self.enforcement_point = enforcement_point
        self.statistics = statistics
        VapiStruct.__init__(self)


RuleStatisticsForEnforcementPoint._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.rule_statistics_for_enforcement_point', {
        'enforcement_point': type.OptionalType(type.StringType()),
        'statistics': type.OptionalType(type.ReferenceType(__name__, 'RuleStatistics')),
    },
    RuleStatisticsForEnforcementPoint,
    False,
    None))



class RuleStatisticsListResult(VapiStruct):
    """
    Paged Collection of rule statistics

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`RuleStatisticsForEnforcementPoint` or ``None``
        :param results: RuleStatistics list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


RuleStatisticsListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.rule_statistics_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'RuleStatisticsForEnforcementPoint'))),
    },
    RuleStatisticsListResult,
    False,
    None))



class RuntimeInterfaceStatistics(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'rx_bytes': 'rx_bytes',
                            'rx_packets': 'rx_packets',
                            'tx_bytes': 'tx_bytes',
                            'tx_packets': 'tx_packets',
                            'dropped_by_security_packets': 'dropped_by_security_packets',
                            'mac_learning': 'mac_learning',
                            'interface_index': 'interface_index',
                            'last_update_timestamp': 'last_update_timestamp',
                            }

    def __init__(self,
                 rx_bytes=None,
                 rx_packets=None,
                 tx_bytes=None,
                 tx_packets=None,
                 dropped_by_security_packets=None,
                 mac_learning=None,
                 interface_index=None,
                 last_update_timestamp=None,
                ):
        """
        :type  rx_bytes: :class:`SIDataCounter` or ``None``
        :param rx_bytes: 
        :type  rx_packets: :class:`SIDataCounter` or ``None``
        :param rx_packets: 
        :type  tx_bytes: :class:`SIDataCounter` or ``None``
        :param tx_bytes: 
        :type  tx_packets: :class:`SIDataCounter` or ``None``
        :param tx_packets: 
        :type  dropped_by_security_packets: :class:`SIPacketsDroppedBySecurity` or ``None``
        :param dropped_by_security_packets: 
        :type  mac_learning: :class:`SIMacLearningCounters` or ``None``
        :param mac_learning: 
        :type  interface_index: :class:`long` or ``None``
        :param interface_index: Index of the interface format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_update_timestamp: :class:`long` or ``None``
        :param last_update_timestamp: Timestamp when the data was last updated; unset if data source has
            never updated the data. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.rx_bytes = rx_bytes
        self.rx_packets = rx_packets
        self.tx_bytes = tx_bytes
        self.tx_packets = tx_packets
        self.dropped_by_security_packets = dropped_by_security_packets
        self.mac_learning = mac_learning
        self.interface_index = interface_index
        self.last_update_timestamp = last_update_timestamp
        VapiStruct.__init__(self)


RuntimeInterfaceStatistics._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.runtime_interface_statistics', {
        'rx_bytes': type.OptionalType(type.ReferenceType(__name__, 'SIDataCounter')),
        'rx_packets': type.OptionalType(type.ReferenceType(__name__, 'SIDataCounter')),
        'tx_bytes': type.OptionalType(type.ReferenceType(__name__, 'SIDataCounter')),
        'tx_packets': type.OptionalType(type.ReferenceType(__name__, 'SIDataCounter')),
        'dropped_by_security_packets': type.OptionalType(type.ReferenceType(__name__, 'SIPacketsDroppedBySecurity')),
        'mac_learning': type.OptionalType(type.ReferenceType(__name__, 'SIMacLearningCounters')),
        'interface_index': type.OptionalType(type.IntegerType()),
        'last_update_timestamp': type.OptionalType(type.IntegerType()),
    },
    RuntimeInterfaceStatistics,
    False,
    None))



class SIAggregatedDataCounter(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'rx_bytes': 'rx_bytes',
                            'rx_packets': 'rx_packets',
                            'tx_bytes': 'tx_bytes',
                            'tx_packets': 'tx_packets',
                            }

    def __init__(self,
                 rx_bytes=None,
                 rx_packets=None,
                 tx_bytes=None,
                 tx_packets=None,
                ):
        """
        :type  rx_bytes: :class:`SIDataCounter` or ``None``
        :param rx_bytes: 
        :type  rx_packets: :class:`SIDataCounter` or ``None``
        :param rx_packets: 
        :type  tx_bytes: :class:`SIDataCounter` or ``None``
        :param tx_bytes: 
        :type  tx_packets: :class:`SIDataCounter` or ``None``
        :param tx_packets: 
        """
        self.rx_bytes = rx_bytes
        self.rx_packets = rx_packets
        self.tx_bytes = tx_bytes
        self.tx_packets = tx_packets
        VapiStruct.__init__(self)


SIAggregatedDataCounter._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.SI_aggregated_data_counter', {
        'rx_bytes': type.OptionalType(type.ReferenceType(__name__, 'SIDataCounter')),
        'rx_packets': type.OptionalType(type.ReferenceType(__name__, 'SIDataCounter')),
        'tx_bytes': type.OptionalType(type.ReferenceType(__name__, 'SIDataCounter')),
        'tx_packets': type.OptionalType(type.ReferenceType(__name__, 'SIDataCounter')),
    },
    SIAggregatedDataCounter,
    False,
    None))



class SIAggregatedDataCounterEx(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'rx_bytes': 'rx_bytes',
                            'rx_packets': 'rx_packets',
                            'tx_bytes': 'tx_bytes',
                            'tx_packets': 'tx_packets',
                            'dropped_by_security_packets': 'dropped_by_security_packets',
                            'mac_learning': 'mac_learning',
                            }

    def __init__(self,
                 rx_bytes=None,
                 rx_packets=None,
                 tx_bytes=None,
                 tx_packets=None,
                 dropped_by_security_packets=None,
                 mac_learning=None,
                ):
        """
        :type  rx_bytes: :class:`SIDataCounter` or ``None``
        :param rx_bytes: 
        :type  rx_packets: :class:`SIDataCounter` or ``None``
        :param rx_packets: 
        :type  tx_bytes: :class:`SIDataCounter` or ``None``
        :param tx_bytes: 
        :type  tx_packets: :class:`SIDataCounter` or ``None``
        :param tx_packets: 
        :type  dropped_by_security_packets: :class:`SIPacketsDroppedBySecurity` or ``None``
        :param dropped_by_security_packets: 
        :type  mac_learning: :class:`SIMacLearningCounters` or ``None``
        :param mac_learning: 
        """
        self.rx_bytes = rx_bytes
        self.rx_packets = rx_packets
        self.tx_bytes = tx_bytes
        self.tx_packets = tx_packets
        self.dropped_by_security_packets = dropped_by_security_packets
        self.mac_learning = mac_learning
        VapiStruct.__init__(self)


SIAggregatedDataCounterEx._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.SI_aggregated_data_counter_ex', {
        'rx_bytes': type.OptionalType(type.ReferenceType(__name__, 'SIDataCounter')),
        'rx_packets': type.OptionalType(type.ReferenceType(__name__, 'SIDataCounter')),
        'tx_bytes': type.OptionalType(type.ReferenceType(__name__, 'SIDataCounter')),
        'tx_packets': type.OptionalType(type.ReferenceType(__name__, 'SIDataCounter')),
        'dropped_by_security_packets': type.OptionalType(type.ReferenceType(__name__, 'SIPacketsDroppedBySecurity')),
        'mac_learning': type.OptionalType(type.ReferenceType(__name__, 'SIMacLearningCounters')),
    },
    SIAggregatedDataCounterEx,
    False,
    None))



class SIDataCounter(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'dropped': 'dropped',
                            'multicast_broadcast': 'multicast_broadcast',
                            'total': 'total',
                            }

    def __init__(self,
                 dropped=None,
                 multicast_broadcast=None,
                 total=None,
                ):
        """
        :type  dropped: :class:`long` or ``None``
        :param dropped: The dropped packets or bytes format: int64
        :type  multicast_broadcast: :class:`long` or ``None``
        :param multicast_broadcast: The multicast and broadcast packets or bytes format: int64
        :type  total: :class:`long` or ``None``
        :param total: The total packets or bytes format: int64
        """
        self.dropped = dropped
        self.multicast_broadcast = multicast_broadcast
        self.total = total
        VapiStruct.__init__(self)


SIDataCounter._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.SI_data_counter', {
        'dropped': type.OptionalType(type.IntegerType()),
        'multicast_broadcast': type.OptionalType(type.IntegerType()),
        'total': type.OptionalType(type.IntegerType()),
    },
    SIDataCounter,
    False,
    None))



class SIMacLearningCounters(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'mac_not_learned_packets_allowed': 'mac_not_learned_packets_allowed',
                            'mac_not_learned_packets_dropped': 'mac_not_learned_packets_dropped',
                            'macs_learned': 'macs_learned',
                            }

    def __init__(self,
                 mac_not_learned_packets_allowed=None,
                 mac_not_learned_packets_dropped=None,
                 macs_learned=None,
                ):
        """
        :type  mac_not_learned_packets_allowed: :class:`long` or ``None``
        :param mac_not_learned_packets_allowed: The number of packets with unknown source MAC address that are
            dispatched without learning the source MAC address. Applicable only
            when the MAC limit is reached and MAC Limit policy is
            MAC_LEARNING_LIMIT_POLICY_ALLOW. format: int64
        :type  mac_not_learned_packets_dropped: :class:`long` or ``None``
        :param mac_not_learned_packets_dropped: The number of packets with unknown source MAC address that are
            dropped without learning the source MAC address. Applicable only
            when the MAC limit is reached and MAC Limit policy is
            MAC_LEARNING_LIMIT_POLICY_DROP. format: int64
        :type  macs_learned: :class:`long` or ``None``
        :param macs_learned: Number of MACs learned format: int64
        """
        self.mac_not_learned_packets_allowed = mac_not_learned_packets_allowed
        self.mac_not_learned_packets_dropped = mac_not_learned_packets_dropped
        self.macs_learned = macs_learned
        VapiStruct.__init__(self)


SIMacLearningCounters._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.SI_mac_learning_counters', {
        'mac_not_learned_packets_allowed': type.OptionalType(type.IntegerType()),
        'mac_not_learned_packets_dropped': type.OptionalType(type.IntegerType()),
        'macs_learned': type.OptionalType(type.IntegerType()),
    },
    SIMacLearningCounters,
    False,
    None))



class SIPacketTypeAndCounter(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'counter': 'counter',
                            'packet_type': 'packet_type',
                            }

    def __init__(self,
                 counter=None,
                 packet_type=None,
                ):
        """
        :type  counter: :class:`long` or ``None``
        :param counter: The number of packets. format: int64
        :type  packet_type: :class:`str` or ``None``
        :param packet_type: The type of the packets
        """
        self.counter = counter
        self.packet_type = packet_type
        VapiStruct.__init__(self)


SIPacketTypeAndCounter._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.SI_packet_type_and_counter', {
        'counter': type.OptionalType(type.IntegerType()),
        'packet_type': type.OptionalType(type.StringType()),
    },
    SIPacketTypeAndCounter,
    False,
    None))



class SIPacketsDroppedBySecurity(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'bpdu_filter_dropped': 'bpdu_filter_dropped',
                            'dhcp_client_dropped_ipv4': 'dhcp_client_dropped_ipv4',
                            'dhcp_client_dropped_ipv6': 'dhcp_client_dropped_ipv6',
                            'dhcp_server_dropped_ipv4': 'dhcp_server_dropped_ipv4',
                            'dhcp_server_dropped_ipv6': 'dhcp_server_dropped_ipv6',
                            'spoof_guard_dropped': 'spoof_guard_dropped',
                            }

    def __init__(self,
                 bpdu_filter_dropped=None,
                 dhcp_client_dropped_ipv4=None,
                 dhcp_client_dropped_ipv6=None,
                 dhcp_server_dropped_ipv4=None,
                 dhcp_server_dropped_ipv6=None,
                 spoof_guard_dropped=None,
                ):
        """
        :type  bpdu_filter_dropped: :class:`long` or ``None``
        :param bpdu_filter_dropped: The number of packets dropped by \"BPDU filter\". format: int64
        :type  dhcp_client_dropped_ipv4: :class:`long` or ``None``
        :param dhcp_client_dropped_ipv4: The number of IPv4 packets dropped by \"DHCP client block\".
            format: int64
        :type  dhcp_client_dropped_ipv6: :class:`long` or ``None``
        :param dhcp_client_dropped_ipv6: The number of IPv6 packets dropped by \"DHCP client block\".
            format: int64
        :type  dhcp_server_dropped_ipv4: :class:`long` or ``None``
        :param dhcp_server_dropped_ipv4: The number of IPv4 packets dropped by \"DHCP server block\".
            format: int64
        :type  dhcp_server_dropped_ipv6: :class:`long` or ``None``
        :param dhcp_server_dropped_ipv6: The number of IPv6 packets dropped by \"DHCP server block\".
            format: int64
        :type  spoof_guard_dropped: :class:`list` of :class:`SIPacketTypeAndCounter` or ``None``
        :param spoof_guard_dropped: The packets dropped by \"Spoof Guard\"; supported packet types are
            IPv4, IPv6, ARP, ND, non-IP.
        """
        self.bpdu_filter_dropped = bpdu_filter_dropped
        self.dhcp_client_dropped_ipv4 = dhcp_client_dropped_ipv4
        self.dhcp_client_dropped_ipv6 = dhcp_client_dropped_ipv6
        self.dhcp_server_dropped_ipv4 = dhcp_server_dropped_ipv4
        self.dhcp_server_dropped_ipv6 = dhcp_server_dropped_ipv6
        self.spoof_guard_dropped = spoof_guard_dropped
        VapiStruct.__init__(self)


SIPacketsDroppedBySecurity._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.SI_packets_dropped_by_security', {
        'bpdu_filter_dropped': type.OptionalType(type.IntegerType()),
        'dhcp_client_dropped_ipv4': type.OptionalType(type.IntegerType()),
        'dhcp_client_dropped_ipv6': type.OptionalType(type.IntegerType()),
        'dhcp_server_dropped_ipv4': type.OptionalType(type.IntegerType()),
        'dhcp_server_dropped_ipv6': type.OptionalType(type.IntegerType()),
        'spoof_guard_dropped': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'SIPacketTypeAndCounter'))),
    },
    SIPacketsDroppedBySecurity,
    False,
    None))



class SVMDeploymentSpec(VapiStruct):
    """
    Deployment Specs holds information required to deploy the Service-VMs.i.e.
    OVF url where the partner Service-VM OVF is hosted. The host type on which
    the OVF(Open Virtualization Format) can be deployed, Form factor to name a
    few.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    HOST_TYPE_ESXI = "ESXI"
    """


    """
    HOST_TYPE_RHELKVM = "RHELKVM"
    """


    """
    HOST_TYPE_UBUNTUKVM = "UBUNTUKVM"
    """


    """
    SERVICE_FORM_FACTOR_SMALL = "SMALL"
    """


    """
    SERVICE_FORM_FACTOR_MEDIUM = "MEDIUM"
    """


    """
    SERVICE_FORM_FACTOR_LARGE = "LARGE"
    """


    """



    _canonical_to_pep_names = {
                            'host_type': 'host_type',
                            'min_host_version': 'min_host_version',
                            'name': 'name',
                            'ovf_url': 'ovf_url',
                            'service_form_factor': 'service_form_factor',
                            'svm_version': 'svm_version',
                            }

    def __init__(self,
                 host_type=None,
                 min_host_version=None,
                 name=None,
                 ovf_url=None,
                 service_form_factor=None,
                 svm_version=None,
                ):
        """
        :type  host_type: :class:`str` or ``None``
        :param host_type: Possible values are: 
            
            * :attr:`SVMDeploymentSpec.HOST_TYPE_ESXI`
            * :attr:`SVMDeploymentSpec.HOST_TYPE_RHELKVM`
            * :attr:`SVMDeploymentSpec.HOST_TYPE_UBUNTUKVM`
            
             Host Type on which the specified OVF can be deployed.
        :type  min_host_version: :class:`str` or ``None``
        :param min_host_version: Minimum host version supported by this ovf. If a host in the
            deployment cluster is having version less than this, then service
            deployment will not happen on that host.
        :type  name: :class:`str` or ``None``
        :param name: Deployment Spec name for ease of use, since multiple DeploymentSpec
            can be specified.
        :type  ovf_url: :class:`str` or ``None``
        :param ovf_url: Location of the partner VM OVF to be deployed.
        :type  service_form_factor: :class:`str` or ``None``
        :param service_form_factor: Possible values are: 
            
            * :attr:`SVMDeploymentSpec.SERVICE_FORM_FACTOR_SMALL`
            * :attr:`SVMDeploymentSpec.SERVICE_FORM_FACTOR_MEDIUM`
            * :attr:`SVMDeploymentSpec.SERVICE_FORM_FACTOR_LARGE`
            
            Supported ServiceInsertion Form Factor for the OVF deployment. The
            default FormFactor is Medium.
        :type  svm_version: :class:`str` or ``None``
        :param svm_version: Partner needs to specify the Service VM version which will get
            deployed.
        """
        self.host_type = host_type
        self.min_host_version = min_host_version
        self.name = name
        self.ovf_url = ovf_url
        self.service_form_factor = service_form_factor
        self.svm_version = svm_version
        VapiStruct.__init__(self)


SVMDeploymentSpec._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.SVM_deployment_spec', {
        'host_type': type.OptionalType(type.StringType()),
        'min_host_version': type.OptionalType(type.StringType()),
        'name': type.OptionalType(type.StringType()),
        'ovf_url': type.OptionalType(type.StringType()),
        'service_form_factor': type.OptionalType(type.StringType()),
        'svm_version': type.OptionalType(type.StringType()),
    },
    SVMDeploymentSpec,
    False,
    None))



class SearchResponse(VapiStruct):
    """
    Search response

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param results: List of records matching the search query.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


SearchResponse._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.search_response', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct))),
    },
    SearchResponse,
    False,
    None))



class SecurityPolicy(VapiStruct):
    """
    Ordered list of Rules.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    CONNECTIVITY_STRATEGY_WHITELIST = "WHITELIST"
    """


    """
    CONNECTIVITY_STRATEGY_BLACKLIST = "BLACKLIST"
    """


    """
    CONNECTIVITY_STRATEGY_WHITELIST_ENABLE_LOGGING = "WHITELIST_ENABLE_LOGGING"
    """


    """
    CONNECTIVITY_STRATEGY_BLACKLIST_ENABLE_LOGGING = "BLACKLIST_ENABLE_LOGGING"
    """


    """
    CONNECTIVITY_STRATEGY_NONE = "NONE"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'category': 'category',
                            'comments': 'comments',
                            'internal_sequence_number': 'internal_sequence_number',
                            'is_default': 'is_default',
                            'lock_modified_by': 'lock_modified_by',
                            'lock_modified_time': 'lock_modified_time',
                            'locked': 'locked',
                            'rule_count': 'rule_count',
                            'scheduler_path': 'scheduler_path',
                            'scope': 'scope',
                            'sequence_number': 'sequence_number',
                            'stateful': 'stateful',
                            'tcp_strict': 'tcp_strict',
                            'connectivity_strategy': 'connectivity_strategy',
                            'default_rule_id': 'default_rule_id',
                            'rules': 'rules',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 category=None,
                 comments=None,
                 internal_sequence_number=None,
                 is_default=None,
                 lock_modified_by=None,
                 lock_modified_time=None,
                 locked=None,
                 rule_count=None,
                 scheduler_path=None,
                 scope=None,
                 sequence_number=None,
                 stateful=None,
                 tcp_strict=None,
                 connectivity_strategy=None,
                 default_rule_id=None,
                 rules=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  category: :class:`str` or ``None``
        :param category: - Distributed Firewall - Policy framework provides five pre-defined
            categories for classifying a security policy. They are
            \"Ethernet\",\"Emergency\", \"Infrastructure\" \"Environment\" and
            \"Application\". There is a pre-determined order in which the
            policy framework manages the priority of these security policies.
            Ethernet category is for supporting layer 2 firewall rules. The
            other four categories are applicable for layer 3 rules. Amongst
            them, the Emergency category has the highest priority followed by
            Infrastructure, Environment and then Application rules.
            Administrator can choose to categorize a security policy into the
            above categories or can choose to leave it empty. If empty it will
            have the least precedence w.r.t the above four categories. - Edge
            Firewall - Policy Framework for Edge Firewall provides six
            pre-defined categories \"Emergency\", \"SystemRules\",
            \"SharedPreRules\", \"LocalGatewayRules\", \"AutoServiceRules\" and
            \"Default\", in order of priority of rules. All categories are
            allowed for Gatetway Policies that belong to 'default' Domain.
            However, for user created domains, category is restricted to
            \"SharedPreRules\" or \"LocalGatewayRules\" only. Also, the users
            can add/modify/delete rules from only the \"SharedPreRules\" and
            \"LocalGatewayRules\" categories. If user doesn't specify the
            category then defaulted to \"Rules\". System generated category is
            used by NSX created rules, for example BFD rules. Autoplumbed
            category used by NSX verticals to autoplumb data path rules.
            Finally, \"Default\" category is the placeholder default rules with
            lowest in the order of priority.
        :type  comments: :class:`str` or ``None``
        :param comments: Comments for security policy lock/unlock.
        :type  internal_sequence_number: :class:`long` or ``None``
        :param internal_sequence_number: This field is to indicate the internal sequence number of a policy
            with respect to the policies across categories. format: int32
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  is_default: :class:`bool` or ``None``
        :param is_default: A flag to indicate whether policy is a default policy.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  lock_modified_by: :class:`str` or ``None``
        :param lock_modified_by: ID of the user who last modified the lock for the secruity policy.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  lock_modified_time: :class:`long` or ``None``
        :param lock_modified_time: SecurityPolicy locked/unlocked time in epoch milliseconds. format:
            int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  locked: :class:`bool` or ``None``
        :param locked: Indicates whether a security policy should be locked. If the
            security policy is locked by a user, then no other user would be
            able to modify this security policy. Once the user releases the
            lock, other users can update this security policy.
        :type  rule_count: :class:`long` or ``None``
        :param rule_count: The count of rules in the policy. format: int32
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  scheduler_path: :class:`str` or ``None``
        :param scheduler_path: Provides a mechanism to apply the rules in this policy for a
            specified time duration.
        :type  scope: :class:`list` of :class:`str` or ``None``
        :param scope: The list of group paths where the rules in this policy will get
            applied. This scope will take precedence over rule level scope.
            Supported only for security and redirection policies. In case of
            RedirectionPolicy, it is expected only when the policy is NS and
            redirecting to service chain.
        :type  sequence_number: :class:`long` or ``None``
        :param sequence_number: This field is used to resolve conflicts between security policies
            across domains. In order to change the sequence number of a policy
            one can fire a POST request on the policy entity with a query
            parameter action=revise The sequence number field will reflect the
            value of the computed sequence number upon execution of the above
            mentioned POST request. For scenarios where the administrator is
            using a template to update several security policies, the only way
            to set the sequence number is to explicitly specify the sequence
            number for each security policy. If no sequence number is specified
            in the payload, a value of 0 is assigned by default. If there are
            multiple policies with the same sequence number then their order is
            not deterministic. If a specific order of policies is desired, then
            one has to specify unique sequence numbers or use the POST request
            on the policy entity with a query parameter action=revise to let
            the framework assign a sequence number format: int32
        :type  stateful: :class:`bool` or ``None``
        :param stateful: Stateful or Stateless nature of security policy is enforced on all
            rules in this security policy. When it is stateful, the state of
            the network connects are tracked and a stateful packet inspection
            is performed. Layer3 security policies can be stateful or
            stateless. By default, they are stateful. Layer2 security policies
            can only be stateless.
        :type  tcp_strict: :class:`bool` or ``None``
        :param tcp_strict: Ensures that a 3 way TCP handshake is done before the data packets
            are sent. tcp_strict=true is supported only for stateful security
            policies. If the tcp_strict flag is not specified and the security
            policy is stateful, then tcp_strict will be set to true.
        :type  connectivity_strategy: :class:`str` or ``None``
        :param connectivity_strategy: Possible values are: 
            
            * :attr:`SecurityPolicy.CONNECTIVITY_STRATEGY_WHITELIST`
            * :attr:`SecurityPolicy.CONNECTIVITY_STRATEGY_BLACKLIST`
            *
              :attr:`SecurityPolicy.CONNECTIVITY_STRATEGY_WHITELIST_ENABLE_LOGGING`
            *
              :attr:`SecurityPolicy.CONNECTIVITY_STRATEGY_BLACKLIST_ENABLE_LOGGING`
            * :attr:`SecurityPolicy.CONNECTIVITY_STRATEGY_NONE`
            
            This field indicates the default connectivity policy for the
            security policy. Based on the connectivitiy strategy, a default
            rule for this security policy will be created. An appropriate
            action will be set on the rule based on the value of the
            connectivity strategy. If NONE is selected or no connectivity
            strategy is specified, then no default rule for the security policy
            gets created. The default rule that gets created will be a any-any
            rule and applied to entities specified in the scope of the security
            policy. Specifying the connectivity_strategy without specifying the
            scope is not allowed. The scope has to be a Group and one cannot
            specify IPAddress directly in the group that is used as scope. This
            default rule is only applicable for the Layer3 security policies.
            WHITELIST - Adds a default drop rule. Administrator can then use
            \"allow\" rules (aka whitelist) to allow traffic between groups
            BLACKLIST - Adds a default allow rule. Admin can then use \"drop\"
            rules (aka blacklist) to block traffic between groups
            WHITELIST_ENABLE_LOGGING - Whitelising with logging enabled
            BLACKLIST_ENABLE_LOGGING - Blacklisting with logging enabled NONE -
            No default rule is created.
        :type  default_rule_id: :class:`long` or ``None``
        :param default_rule_id: Based on the value of the connectivity strategy, a default rule is
            created for the security policy. The rule id is internally assigned
            by the system for this default rule. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  rules: :class:`list` of :class:`Rule` or ``None``
        :param rules: Rules that are a part of this SecurityPolicy
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.category = category
        self.comments = comments
        self.internal_sequence_number = internal_sequence_number
        self.is_default = is_default
        self.lock_modified_by = lock_modified_by
        self.lock_modified_time = lock_modified_time
        self.locked = locked
        self.rule_count = rule_count
        self.scheduler_path = scheduler_path
        self.scope = scope
        self.sequence_number = sequence_number
        self.stateful = stateful
        self.tcp_strict = tcp_strict
        self.connectivity_strategy = connectivity_strategy
        self.default_rule_id = default_rule_id
        self.rules = rules
        VapiStruct.__init__(self)


SecurityPolicy._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.security_policy', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'category': type.OptionalType(type.StringType()),
        'comments': type.OptionalType(type.StringType()),
        'internal_sequence_number': type.OptionalType(type.IntegerType()),
        'is_default': type.OptionalType(type.BooleanType()),
        'lock_modified_by': type.OptionalType(type.StringType()),
        'lock_modified_time': type.OptionalType(type.IntegerType()),
        'locked': type.OptionalType(type.BooleanType()),
        'rule_count': type.OptionalType(type.IntegerType()),
        'scheduler_path': type.OptionalType(type.StringType()),
        'scope': type.OptionalType(type.ListType(type.StringType())),
        'sequence_number': type.OptionalType(type.IntegerType()),
        'stateful': type.OptionalType(type.BooleanType()),
        'tcp_strict': type.OptionalType(type.BooleanType()),
        'connectivity_strategy': type.OptionalType(type.StringType()),
        'default_rule_id': type.OptionalType(type.IntegerType()),
        'rules': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Rule'))),
    },
    SecurityPolicy,
    False,
    None))



class SecurityPolicyListResult(VapiStruct):
    """
    Paged Collection of security policies

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`SecurityPolicy` or ``None``
        :param results: SecurityPolicy list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


SecurityPolicyListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.security_policy_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'SecurityPolicy'))),
    },
    SecurityPolicyListResult,
    False,
    None))



class SecurityPolicyStatistics(VapiStruct):
    """
    Aggregate statistics of all the rules in a security policy.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'internal_section_id': 'internal_section_id',
                            'lr_path': 'lr_path',
                            'result_count': 'result_count',
                            'results': 'results',
                            }

    def __init__(self,
                 internal_section_id=None,
                 lr_path=None,
                 result_count=None,
                 results=None,
                ):
        """
        :type  internal_section_id: :class:`str` or ``None``
        :param internal_section_id: Realized id of the section on NSX MP. Policy Manager can create
            more than one section per SecurityPolicy, in which case this
            identifier helps to distinguish between the multiple sections
            created.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  lr_path: :class:`str` or ``None``
        :param lr_path: Path of the LR on which the section is applied in case of Gateway
            Firewall.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Total count for rule statistics format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`RuleStatistics` or ``None``
        :param results: List of rule statistics.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.internal_section_id = internal_section_id
        self.lr_path = lr_path
        self.result_count = result_count
        self.results = results
        VapiStruct.__init__(self)


SecurityPolicyStatistics._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.security_policy_statistics', {
        'internal_section_id': type.OptionalType(type.StringType()),
        'lr_path': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'RuleStatistics'))),
    },
    SecurityPolicyStatistics,
    False,
    None))



class SecurityPolicyStatisticsForEnforcementPoint(VapiStruct):
    """
    Aggregate statistics of all the rules in a security policy for a specific
    enforcement point.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'enforcement_point': 'enforcement_point',
                            'statistics': 'statistics',
                            }

    def __init__(self,
                 enforcement_point=None,
                 statistics=None,
                ):
        """
        :type  enforcement_point: :class:`str` or ``None``
        :param enforcement_point: Enforcement point to fetch the statistics from.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  statistics: :class:`SecurityPolicyStatistics` or ``None``
        :param statistics: Statistics for the specified enforcement point
        """
        self.enforcement_point = enforcement_point
        self.statistics = statistics
        VapiStruct.__init__(self)


SecurityPolicyStatisticsForEnforcementPoint._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.security_policy_statistics_for_enforcement_point', {
        'enforcement_point': type.OptionalType(type.StringType()),
        'statistics': type.OptionalType(type.ReferenceType(__name__, 'SecurityPolicyStatistics')),
    },
    SecurityPolicyStatisticsForEnforcementPoint,
    False,
    None))



class SecurityPolicyStatisticsListResult(VapiStruct):
    """
    Paged Collection of Security Policy statistics

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`SecurityPolicyStatisticsForEnforcementPoint` or ``None``
        :param results: Security Policy statistics list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


SecurityPolicyStatisticsListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.security_policy_statistics_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'SecurityPolicyStatisticsForEnforcementPoint'))),
    },
    SecurityPolicyStatisticsListResult,
    False,
    None))



class SecurityProfileBindingMap(VapiStruct):
    """
    Base security profile binding map

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        VapiStruct.__init__(self)


SecurityProfileBindingMap._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.security_profile_binding_map', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
    },
    SecurityProfileBindingMap,
    False,
    None))



class SecurityZone(VapiStruct):
    """
    A Security Zone establishes the policies that govern the connectivity of
    application tiers. While applications run in a self-service mode, the
    security zone policies constrain the connectivity based on the security
    requirements of that zone. In Policy Applications, each application tier is
    associated with a security zone that should be pre-created by the VHC
    admin.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'sites': 'sites',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 sites=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sites: :class:`list` of :class:`str` or ``None``
        :param sites: PolicyPath of the sites
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.sites = sites
        VapiStruct.__init__(self)


SecurityZone._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.security_zone', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'sites': type.OptionalType(type.ListType(type.StringType())),
    },
    SecurityZone,
    False,
    None))



class SecurityZoneBinding(VapiStruct):
    """
    Binding object to bind Security Zone and Application Tier

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'security_zone_path': 'security_zone_path',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 security_zone_path=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  security_zone_path: :class:`str` or ``None``
        :param security_zone_path: Path of the security zone.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.security_zone_path = security_zone_path
        VapiStruct.__init__(self)


SecurityZoneBinding._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.security_zone_binding', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'security_zone_path': type.OptionalType(type.StringType()),
    },
    SecurityZoneBinding,
    False,
    None))



class SecurityZoneRule(VapiStruct):
    """
    A SecurityZoneRule specifies the security policy that applies to the tiers
    associated with the security zones.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    ACTION_ALLOW = "ALLOW"
    """


    """
    ACTION_DROP = "DROP"
    """


    """
    ACTION_REJECT = "REJECT"
    """


    """
    ACTION_SKIP = "SKIP"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'action': 'action',
                            'destination': 'destination',
                            'disabled': 'disabled',
                            'logged': 'logged',
                            'notes': 'notes',
                            'sequence_number': 'sequence_number',
                            'services': 'services',
                            'source': 'source',
                            'tag': 'tag',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 action=None,
                 destination=None,
                 disabled=None,
                 logged=None,
                 notes=None,
                 sequence_number=None,
                 services=None,
                 source=None,
                 tag=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  action: :class:`str` or ``None``
        :param action: Possible values are: 
            
            * :attr:`SecurityZoneRule.ACTION_ALLOW`
            * :attr:`SecurityZoneRule.ACTION_DROP`
            * :attr:`SecurityZoneRule.ACTION_REJECT`
            * :attr:`SecurityZoneRule.ACTION_SKIP`
            
             The action to be applied to all the services.
        :type  destination: :class:`list` of :class:`str` or ``None``
        :param destination: Destination field indicates the destination path of the Rule. It
            could be; - Path of the current/other zone - One/more tiers
            associated with the zone - Shared Group - ANY (It should be the
            ONLY element in the services array. Error will be thrown if ANY is
            used in conjunction with other values.) Note that either Source or
            Destination has to be associated with the current Zone.
        :type  disabled: :class:`bool` or ``None``
        :param disabled: Flag to disable the rule. Default is enabled.
        :type  logged: :class:`bool` or ``None``
        :param logged: Flag to enable packet logging. Default is disabled.
        :type  notes: :class:`str` or ``None``
        :param notes: Text for additional notes on changes.
        :type  sequence_number: :class:`long` or ``None``
        :param sequence_number: This field is used to resolve conflicts between multiple
            SecurityZoneRule under same securityZone format: int32
        :type  services: :class:`list` of :class:`str` or ``None``
        :param services: ID of the Service that is defined in Infra space. e.g. HTTPS. In
            order to specify all services, use the constant \"ANY\". If \"ANY\"
            is used, it should be the ONLY element in the services array. Error
            will be thrown if ANY is used in conjunction with other values.
        :type  source: :class:`list` of :class:`str` or ``None``
        :param source: Source field indicates the source path of the Rule. It could be; -
            Path of the current/other zone - One/more tiers associated with the
            zone - Shared Group - ANY (It should be the ONLY element in the
            services array. Error will be thrown if ANY is used in conjunction
            with other values.) Note that either Source or Destination has to
            be associated with the current Zone.
        :type  tag: :class:`str` or ``None``
        :param tag: User level field which will be printed in CLI and packet logs.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.action = action
        self.destination = destination
        self.disabled = disabled
        self.logged = logged
        self.notes = notes
        self.sequence_number = sequence_number
        self.services = services
        self.source = source
        self.tag = tag
        VapiStruct.__init__(self)


SecurityZoneRule._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.security_zone_rule', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'action': type.OptionalType(type.StringType()),
        'destination': type.OptionalType(type.ListType(type.StringType())),
        'disabled': type.OptionalType(type.BooleanType()),
        'logged': type.OptionalType(type.BooleanType()),
        'notes': type.OptionalType(type.StringType()),
        'sequence_number': type.OptionalType(type.IntegerType()),
        'services': type.OptionalType(type.ListType(type.StringType())),
        'source': type.OptionalType(type.ListType(type.StringType())),
        'tag': type.OptionalType(type.StringType()),
    },
    SecurityZoneRule,
    False,
    None))



class Segment(VapiStruct):
    """
    Segment configuration to attach workloads.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    ADMIN_STATE_UP = "UP"
    """


    """
    ADMIN_STATE_DOWN = "DOWN"
    """


    """
    REPLICATION_MODE_MTEP = "MTEP"
    """


    """
    REPLICATION_MODE_SOURCE = "SOURCE"
    """


    """
    TYPE_ROUTED = "ROUTED"
    """


    """
    TYPE_EXTENDED = "EXTENDED"
    """


    """
    TYPE_ROUTED_AND_EXTENDED = "ROUTED_AND_EXTENDED"
    """


    """
    TYPE_DISCONNECTED = "DISCONNECTED"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'address_bindings': 'address_bindings',
                            'admin_state': 'admin_state',
                            'advanced_config': 'advanced_config',
                            'bridge_profiles': 'bridge_profiles',
                            'connectivity_path': 'connectivity_path',
                            'dhcp_config_path': 'dhcp_config_path',
                            'domain_name': 'domain_name',
                            'extra_configs': 'extra_configs',
                            'federation_config': 'federation_config',
                            'l2_extension': 'l2_extension',
                            'ls_id': 'ls_id',
                            'mac_pool_id': 'mac_pool_id',
                            'metadata_proxy_paths': 'metadata_proxy_paths',
                            'overlay_id': 'overlay_id',
                            'replication_mode': 'replication_mode',
                            'subnets': 'subnets',
                            'transport_zone_path': 'transport_zone_path',
                            'type': 'type',
                            'vlan_ids': 'vlan_ids',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 address_bindings=None,
                 admin_state=None,
                 advanced_config=None,
                 bridge_profiles=None,
                 connectivity_path=None,
                 dhcp_config_path=None,
                 domain_name=None,
                 extra_configs=None,
                 federation_config=None,
                 l2_extension=None,
                 ls_id=None,
                 mac_pool_id=None,
                 metadata_proxy_paths=None,
                 overlay_id=None,
                 replication_mode=None,
                 subnets=None,
                 transport_zone_path=None,
                 type=None,
                 vlan_ids=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  address_bindings: :class:`list` of :class:`PortAddressBindingEntry` or ``None``
        :param address_bindings: Static address binding used for the Segment.
        :type  admin_state: :class:`str` or ``None``
        :param admin_state: Possible values are: 
            
            * :attr:`Segment.ADMIN_STATE_UP`
            * :attr:`Segment.ADMIN_STATE_DOWN`
            
             Represents Desired state of the Segment
        :type  advanced_config: :class:`SegmentAdvancedConfig` or ``None``
        :param advanced_config: Advanced configuration for Segment.
        :type  bridge_profiles: :class:`list` of :class:`BridgeProfileConfig` or ``None``
        :param bridge_profiles: Multiple distinct L2 bridge profiles can be configured.
        :type  connectivity_path: :class:`str` or ``None``
        :param connectivity_path: Policy path to the connecting Tier-0 or Tier-1. Valid only for
            segments created under Infra.
        :type  dhcp_config_path: :class:`str` or ``None``
        :param dhcp_config_path: Policy path to DHCP server or relay configuration to use for all
            IPv4 & IPv6 subnets configured on this segment.
        :type  domain_name: :class:`str` or ``None``
        :param domain_name: DNS domain name
        :type  extra_configs: :class:`list` of :class:`SegmentExtraConfig` or ``None``
        :param extra_configs: This property could be used for vendor specific configuration in
            key value string pairs, the setting in extra_configs will be
            automatically inheritted by segment ports in the Segment.
        :type  federation_config: :class:`FederationConnectivityConfig` or ``None``
        :param federation_config: Additional config for federation.
        :type  l2_extension: :class:`L2Extension` or ``None``
        :param l2_extension: Configuration for extending Segment through L2 VPN
        :type  ls_id: :class:`str` or ``None``
        :param ls_id: This property is deprecated. The property will continue to work as
            expected for existing segments. The segments that are newly created
            with ls_id will be ignored. Sepcify pre-creted logical switch id
            for Segment.
        :type  mac_pool_id: :class:`str` or ``None``
        :param mac_pool_id: Mac pool id that associated with a Segment.
        :type  metadata_proxy_paths: :class:`list` of :class:`str` or ``None``
        :param metadata_proxy_paths: Policy path to metadata proxy configuration. Multiple distinct MD
            proxies can be configured.
        :type  overlay_id: :class:`long` or ``None``
        :param overlay_id: Used for overlay connectivity of segments. The overlay_id should be
            allocated from the pool as definied by enforcement-point. If not
            provided, it is auto-allocated from the default pool on the
            enforcement-point. format: int32
        :type  replication_mode: :class:`str` or ``None``
        :param replication_mode: Possible values are: 
            
            * :attr:`Segment.REPLICATION_MODE_MTEP`
            * :attr:`Segment.REPLICATION_MODE_SOURCE`
            
            If this field is not set for overlay segment, then the default of
            MTEP will be used.
        :type  subnets: :class:`list` of :class:`SegmentSubnet` or ``None``
        :param subnets: Subnet configuration. Max 1 subnet
        :type  transport_zone_path: :class:`str` or ``None``
        :param transport_zone_path: Policy path to the transport zone. Supported for VLAN backed
            segments as well as Overlay Segments. - This field is required for
            VLAN backed Segments. - For overlay Segments, it is auto assigned
            if only one transport zone exists in the enforcement point. Default
            transport zone is auto assigned for overlay segments if none
            specified.
        :type  type: :class:`str` or ``None``
        :param type: Possible values are: 
            
            * :attr:`Segment.TYPE_ROUTED`
            * :attr:`Segment.TYPE_EXTENDED`
            * :attr:`Segment.TYPE_ROUTED_AND_EXTENDED`
            * :attr:`Segment.TYPE_DISCONNECTED`
            
             Segment type based on configuration.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  vlan_ids: :class:`list` of :class:`str` or ``None``
        :param vlan_ids: VLAN ids for a VLAN backed Segment. Can be a VLAN id or a range of
            VLAN ids specified with '-' in between.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.address_bindings = address_bindings
        self.admin_state = admin_state
        self.advanced_config = advanced_config
        self.bridge_profiles = bridge_profiles
        self.connectivity_path = connectivity_path
        self.dhcp_config_path = dhcp_config_path
        self.domain_name = domain_name
        self.extra_configs = extra_configs
        self.federation_config = federation_config
        self.l2_extension = l2_extension
        self.ls_id = ls_id
        self.mac_pool_id = mac_pool_id
        self.metadata_proxy_paths = metadata_proxy_paths
        self.overlay_id = overlay_id
        self.replication_mode = replication_mode
        self.subnets = subnets
        self.transport_zone_path = transport_zone_path
        self.type = type
        self.vlan_ids = vlan_ids
        VapiStruct.__init__(self)


Segment._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.segment', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'address_bindings': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PortAddressBindingEntry'))),
        'admin_state': type.OptionalType(type.StringType()),
        'advanced_config': type.OptionalType(type.ReferenceType(__name__, 'SegmentAdvancedConfig')),
        'bridge_profiles': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'BridgeProfileConfig'))),
        'connectivity_path': type.OptionalType(type.StringType()),
        'dhcp_config_path': type.OptionalType(type.StringType()),
        'domain_name': type.OptionalType(type.StringType()),
        'extra_configs': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'SegmentExtraConfig'))),
        'federation_config': type.OptionalType(type.ReferenceType(__name__, 'FederationConnectivityConfig')),
        'l2_extension': type.OptionalType(type.ReferenceType(__name__, 'L2Extension')),
        'ls_id': type.OptionalType(type.StringType()),
        'mac_pool_id': type.OptionalType(type.StringType()),
        'metadata_proxy_paths': type.OptionalType(type.ListType(type.StringType())),
        'overlay_id': type.OptionalType(type.IntegerType()),
        'replication_mode': type.OptionalType(type.StringType()),
        'subnets': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'SegmentSubnet'))),
        'transport_zone_path': type.OptionalType(type.StringType()),
        'type': type.OptionalType(type.StringType()),
        'vlan_ids': type.OptionalType(type.ListType(type.StringType())),
    },
    Segment,
    False,
    None))



class SegmentAdvancedConfig(VapiStruct):
    """
    Advanced configuration for Segment

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    CONNECTIVITY_ON = "ON"
    """


    """
    CONNECTIVITY_OFF = "OFF"
    """


    """



    _canonical_to_pep_names = {
                            'connectivity': 'connectivity',
                            'address_pool_paths': 'address_pool_paths',
                            'hybrid': 'hybrid',
                            'inter_router': 'inter_router',
                            'local_egress': 'local_egress',
                            'local_egress_routing_policies': 'local_egress_routing_policies',
                            'multicast': 'multicast',
                            'uplink_teaming_policy_name': 'uplink_teaming_policy_name',
                            }

    def __init__(self,
                 connectivity=None,
                 address_pool_paths=None,
                 hybrid=None,
                 inter_router=None,
                 local_egress=None,
                 local_egress_routing_policies=None,
                 multicast=None,
                 uplink_teaming_policy_name=None,
                ):
        """
        :type  connectivity: :class:`str` or ``None``
        :param connectivity: Possible values are: 
            
            * :attr:`SegmentAdvancedConfig.CONNECTIVITY_ON`
            * :attr:`SegmentAdvancedConfig.CONNECTIVITY_OFF`
            
            Connectivity configuration to manually connect (ON) or disconnect
            (OFF) a Tier1 segment from corresponding Tier1 gateway. Only valid
            for Tier1 Segments. This property is ignored for L2 VPN extended
            segments when subnets property is not specified.
        :type  address_pool_paths: :class:`list` of :class:`str` or ``None``
        :param address_pool_paths: Policy path to IP address pools.
        :type  hybrid: :class:`bool` or ``None``
        :param hybrid: When set to true, all the ports created on this segment will behave
            in a hybrid fashion. The hybrid port indicates to NSX that the VM
            intends to operate in underlay mode, but retains the ability to
            forward egress traffic to the NSX overlay network. This property is
            only applicable for segment created with transport zone type
            OVERLAY_STANDARD. This property cannot be modified after segment is
            created.
        :type  inter_router: :class:`bool` or ``None``
        :param inter_router: When set to true, any port attached to this logical switch will not
            be visible through VC/ESX UI
        :type  local_egress: :class:`bool` or ``None``
        :param local_egress: This property is used to enable proximity routing with local
            egress. When set to true, logical router interface (downlink)
            connecting Segment to Tier0/Tier1 gateway is configured with
            prefix-length 32.
        :type  local_egress_routing_policies: :class:`list` of :class:`LocalEgressRoutingEntry` or ``None``
        :param local_egress_routing_policies: An ordered list of routing policies to forward traffic to the next
            hop.
        :type  multicast: :class:`bool` or ``None``
        :param multicast: Enable multicast for a segment. Only applicable for segments
            connected to Tier0 gateway.
        :type  uplink_teaming_policy_name: :class:`str` or ``None``
        :param uplink_teaming_policy_name: The name of the switching uplink teaming policy for the Segment.
            This name corresponds to one of the switching uplink teaming policy
            names listed in TransportZone associated with the Segment. See
            transport_zone_path property above for more details. When this
            property is not specified, the segment will not have a teaming
            policy associated with it and the host switch's default teaming
            policy will be used by MP.
        """
        self.connectivity = connectivity
        self.address_pool_paths = address_pool_paths
        self.hybrid = hybrid
        self.inter_router = inter_router
        self.local_egress = local_egress
        self.local_egress_routing_policies = local_egress_routing_policies
        self.multicast = multicast
        self.uplink_teaming_policy_name = uplink_teaming_policy_name
        VapiStruct.__init__(self)


SegmentAdvancedConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.segment_advanced_config', {
        'connectivity': type.OptionalType(type.StringType()),
        'address_pool_paths': type.OptionalType(type.ListType(type.StringType())),
        'hybrid': type.OptionalType(type.BooleanType()),
        'inter_router': type.OptionalType(type.BooleanType()),
        'local_egress': type.OptionalType(type.BooleanType()),
        'local_egress_routing_policies': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'LocalEgressRoutingEntry'))),
        'multicast': type.OptionalType(type.BooleanType()),
        'uplink_teaming_policy_name': type.OptionalType(type.StringType()),
    },
    SegmentAdvancedConfig,
    False,
    None))



class SegmentConfigurationState(VapiStruct):
    """
    Segment state on specific Enforcement Point.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    STATE_PENDING = "pending"
    """


    """
    STATE_IN_PROGRESS = "in_progress"
    """


    """
    STATE_SUCCESS = "success"
    """


    """
    STATE_FAILED = "failed"
    """


    """
    STATE_PARTIAL_SUCCESS = "partial_success"
    """


    """
    STATE_ORPHANED = "orphaned"
    """


    """
    STATE_UNKNOWN = "unknown"
    """


    """
    STATE_ERROR = "error"
    """


    """
    STATE_IN_SYNC = "in_sync"
    """


    """
    STATE_NOT_AVAILABLE = "NOT_AVAILABLE"
    """


    """
    STATE_VM_DEPLOYMENT_QUEUED = "VM_DEPLOYMENT_QUEUED"
    """


    """
    STATE_VM_DEPLOYMENT_IN_PROGRESS = "VM_DEPLOYMENT_IN_PROGRESS"
    """


    """
    STATE_VM_DEPLOYMENT_FAILED = "VM_DEPLOYMENT_FAILED"
    """


    """
    STATE_VM_POWER_ON_IN_PROGRESS = "VM_POWER_ON_IN_PROGRESS"
    """


    """
    STATE_VM_POWER_ON_FAILED = "VM_POWER_ON_FAILED"
    """


    """
    STATE_REGISTRATION_PENDING = "REGISTRATION_PENDING"
    """


    """
    STATE_NODE_NOT_READY = "NODE_NOT_READY"
    """


    """
    STATE_NODE_READY = "NODE_READY"
    """


    """
    STATE_VM_POWER_OFF_IN_PROGRESS = "VM_POWER_OFF_IN_PROGRESS"
    """


    """
    STATE_VM_POWER_OFF_FAILED = "VM_POWER_OFF_FAILED"
    """


    """
    STATE_VM_UNDEPLOY_IN_PROGRESS = "VM_UNDEPLOY_IN_PROGRESS"
    """


    """
    STATE_VM_UNDEPLOY_FAILED = "VM_UNDEPLOY_FAILED"
    """


    """
    STATE_VM_UNDEPLOY_SUCCESSFUL = "VM_UNDEPLOY_SUCCESSFUL"
    """


    """
    STATE_EDGE_CONFIG_ERROR = "EDGE_CONFIG_ERROR"
    """


    """
    STATE_VM_DEPLOYMENT_RESTARTED = "VM_DEPLOYMENT_RESTARTED"
    """


    """
    STATE_REGISTRATION_FAILED = "REGISTRATION_FAILED"
    """


    """
    STATE_TRANSPORT_NODE_SYNC_PENDING = "TRANSPORT_NODE_SYNC_PENDING"
    """


    """
    STATE_TRANSPORT_NODE_CONFIGURATION_MISSING = "TRANSPORT_NODE_CONFIGURATION_MISSING"
    """


    """
    STATE_EDGE_HARDWARE_NOT_SUPPORTED = "EDGE_HARDWARE_NOT_SUPPORTED"
    """


    """
    STATE_MULTIPLE_OVERLAY_TZS_NOT_SUPPORTED = "MULTIPLE_OVERLAY_TZS_NOT_SUPPORTED"
    """


    """
    STATE_TN_OVERLAY_TZ_IN_USE_BY_EDGE_CLUSTER = "TN_OVERLAY_TZ_IN_USE_BY_EDGE_CLUSTER"
    """


    """
    STATE_TZ_ENDPOINTS_NOT_SPECIFIED = "TZ_ENDPOINTS_NOT_SPECIFIED"
    """


    """
    STATE_NO_PNIC_PREPARED_IN_EDGE = "NO_PNIC_PREPARED_IN_EDGE"
    """


    """
    STATE_APPLIANCE_INTERNAL_ERROR = "APPLIANCE_INTERNAL_ERROR"
    """


    """
    STATE_VTEP_DHCP_NOT_SUPPORTED = "VTEP_DHCP_NOT_SUPPORTED"
    """


    """
    STATE_UNSUPPORTED_HOST_SWITCH_PROFILE = "UNSUPPORTED_HOST_SWITCH_PROFILE"
    """


    """
    STATE_UPLINK_HOST_SWITCH_PROFILE_NOT_SPECIFIED = "UPLINK_HOST_SWITCH_PROFILE_NOT_SPECIFIED"
    """


    """
    STATE_HOSTSWITCH_PROFILE_NOT_FOUND = "HOSTSWITCH_PROFILE_NOT_FOUND"
    """


    """
    STATE_LLDP_SEND_ENABLED_NOT_SUPPORTED = "LLDP_SEND_ENABLED_NOT_SUPPORTED"
    """


    """
    STATE_UNSUPPORTED_NAMED_TEAMING_POLICY = "UNSUPPORTED_NAMED_TEAMING_POLICY"
    """


    """
    STATE_LBSRCID_NOT_SUPPORTED_FOR_EDGE_VM = "LBSRCID_NOT_SUPPORTED_FOR_EDGE_VM"
    """


    """
    STATE_LACP_NOT_SUPPORTED_FOR_EDGE_VM = "LACP_NOT_SUPPORTED_FOR_EDGE_VM"
    """


    """
    STATE_STANDBY_UPLINKS_NOT_SUPPORTED_FOR_EDGE_VM = "STANDBY_UPLINKS_NOT_SUPPORTED_FOR_EDGE_VM"
    """


    """
    STATE_MULTIPLE_ACTIVE_UPLINKS_NOT_SUPPORTED_FOR_EDGE = "MULTIPLE_ACTIVE_UPLINKS_NOT_SUPPORTED_FOR_EDGE"
    """


    """
    STATE_UNSUPPORTED_LACP_LB_ALGO_FOR_NODE = "UNSUPPORTED_LACP_LB_ALGO_FOR_NODE"
    """


    """
    STATE_EDGE_NODE_VERSION_NOT_SUPPORTED = "EDGE_NODE_VERSION_NOT_SUPPORTED"
    """


    """
    STATE_NO_PNIC_SPECIFIED_IN_TN = "NO_PNIC_SPECIFIED_IN_TN"
    """


    """
    STATE_INVALID_PNIC_DEVICE_NAME = "INVALID_PNIC_DEVICE_NAME"
    """


    """
    STATE_TRANSPORT_NODE_READY = "TRANSPORT_NODE_READY"
    """


    """
    STATE_VM_NETWORK_EDIT_PENDING = "VM_NETWORK_EDIT_PENDING"
    """


    """
    STATE_UNSUPPORTED_DEFAULT_TEAMING_POLICY = "UNSUPPORTED_DEFAULT_TEAMING_POLICY"
    """


    """
    STATE_MPA_DISCONNECTED = "MPA_DISCONNECTED"
    """


    """
    STATE_VM_RENAME_PENDING = "VM_RENAME_PENDING"
    """


    """
    STATE_VM_CONFIG_EDIT_PENDING = "VM_CONFIG_EDIT_PENDING"
    """


    """
    STATE_VM_NETWORK_EDIT_FAILED = "VM_NETWORK_EDIT_FAILED"
    """


    """
    STATE_VM_RENAME_FAILED = "VM_RENAME_FAILED"
    """


    """
    STATE_VM_CONFIG_EDIT_FAILED = "VM_CONFIG_EDIT_FAILED"
    """


    """
    STATE_VM_CONFIG_DISCREPANCY = "VM_CONFIG_DISCREPANCY"
    """


    """
    STATE_VM_NODE_REFRESH_FAILED = "VM_NODE_REFRESH_FAILED"
    """


    """
    STATE_VM_PLACEMENT_REFRESH_FAILED = "VM_PLACEMENT_REFRESH_FAILED"
    """


    """
    STATE_REGISTRATION_TIMEDOUT = "REGISTRATION_TIMEDOUT"
    """


    """



    _canonical_to_pep_names = {
                            'details': 'details',
                            'failure_code': 'failure_code',
                            'failure_message': 'failure_message',
                            'state': 'state',
                            'segment_path': 'segment_path',
                            }

    def __init__(self,
                 details=None,
                 failure_code=None,
                 failure_message=None,
                 state=None,
                 segment_path=None,
                ):
        """
        :type  details: :class:`list` of :class:`ConfigurationStateElement` or ``None``
        :param details: Array of configuration state of various sub systems
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  failure_code: :class:`long` or ``None``
        :param failure_code: Error code format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  failure_message: :class:`str` or ``None``
        :param failure_message: Error message in case of failure
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  state: :class:`str` or ``None``
        :param state: Possible values are: 
            
            * :attr:`SegmentConfigurationState.STATE_PENDING`
            * :attr:`SegmentConfigurationState.STATE_IN_PROGRESS`
            * :attr:`SegmentConfigurationState.STATE_SUCCESS`
            * :attr:`SegmentConfigurationState.STATE_FAILED`
            * :attr:`SegmentConfigurationState.STATE_PARTIAL_SUCCESS`
            * :attr:`SegmentConfigurationState.STATE_ORPHANED`
            * :attr:`SegmentConfigurationState.STATE_UNKNOWN`
            * :attr:`SegmentConfigurationState.STATE_ERROR`
            * :attr:`SegmentConfigurationState.STATE_IN_SYNC`
            * :attr:`SegmentConfigurationState.STATE_NOT_AVAILABLE`
            * :attr:`SegmentConfigurationState.STATE_VM_DEPLOYMENT_QUEUED`
            * :attr:`SegmentConfigurationState.STATE_VM_DEPLOYMENT_IN_PROGRESS`
            * :attr:`SegmentConfigurationState.STATE_VM_DEPLOYMENT_FAILED`
            * :attr:`SegmentConfigurationState.STATE_VM_POWER_ON_IN_PROGRESS`
            * :attr:`SegmentConfigurationState.STATE_VM_POWER_ON_FAILED`
            * :attr:`SegmentConfigurationState.STATE_REGISTRATION_PENDING`
            * :attr:`SegmentConfigurationState.STATE_NODE_NOT_READY`
            * :attr:`SegmentConfigurationState.STATE_NODE_READY`
            * :attr:`SegmentConfigurationState.STATE_VM_POWER_OFF_IN_PROGRESS`
            * :attr:`SegmentConfigurationState.STATE_VM_POWER_OFF_FAILED`
            * :attr:`SegmentConfigurationState.STATE_VM_UNDEPLOY_IN_PROGRESS`
            * :attr:`SegmentConfigurationState.STATE_VM_UNDEPLOY_FAILED`
            * :attr:`SegmentConfigurationState.STATE_VM_UNDEPLOY_SUCCESSFUL`
            * :attr:`SegmentConfigurationState.STATE_EDGE_CONFIG_ERROR`
            * :attr:`SegmentConfigurationState.STATE_VM_DEPLOYMENT_RESTARTED`
            * :attr:`SegmentConfigurationState.STATE_REGISTRATION_FAILED`
            *
              :attr:`SegmentConfigurationState.STATE_TRANSPORT_NODE_SYNC_PENDING`
            *
              :attr:`SegmentConfigurationState.STATE_TRANSPORT_NODE_CONFIGURATION_MISSING`
            *
              :attr:`SegmentConfigurationState.STATE_EDGE_HARDWARE_NOT_SUPPORTED`
            *
              :attr:`SegmentConfigurationState.STATE_MULTIPLE_OVERLAY_TZS_NOT_SUPPORTED`
            *
              :attr:`SegmentConfigurationState.STATE_TN_OVERLAY_TZ_IN_USE_BY_EDGE_CLUSTER`
            *
              :attr:`SegmentConfigurationState.STATE_TZ_ENDPOINTS_NOT_SPECIFIED`
            * :attr:`SegmentConfigurationState.STATE_NO_PNIC_PREPARED_IN_EDGE`
            * :attr:`SegmentConfigurationState.STATE_APPLIANCE_INTERNAL_ERROR`
            * :attr:`SegmentConfigurationState.STATE_VTEP_DHCP_NOT_SUPPORTED`
            *
              :attr:`SegmentConfigurationState.STATE_UNSUPPORTED_HOST_SWITCH_PROFILE`
            *
              :attr:`SegmentConfigurationState.STATE_UPLINK_HOST_SWITCH_PROFILE_NOT_SPECIFIED`
            *
              :attr:`SegmentConfigurationState.STATE_HOSTSWITCH_PROFILE_NOT_FOUND`
            *
              :attr:`SegmentConfigurationState.STATE_LLDP_SEND_ENABLED_NOT_SUPPORTED`
            *
              :attr:`SegmentConfigurationState.STATE_UNSUPPORTED_NAMED_TEAMING_POLICY`
            *
              :attr:`SegmentConfigurationState.STATE_LBSRCID_NOT_SUPPORTED_FOR_EDGE_VM`
            *
              :attr:`SegmentConfigurationState.STATE_LACP_NOT_SUPPORTED_FOR_EDGE_VM`
            *
              :attr:`SegmentConfigurationState.STATE_STANDBY_UPLINKS_NOT_SUPPORTED_FOR_EDGE_VM`
            *
              :attr:`SegmentConfigurationState.STATE_MULTIPLE_ACTIVE_UPLINKS_NOT_SUPPORTED_FOR_EDGE`
            *
              :attr:`SegmentConfigurationState.STATE_UNSUPPORTED_LACP_LB_ALGO_FOR_NODE`
            *
              :attr:`SegmentConfigurationState.STATE_EDGE_NODE_VERSION_NOT_SUPPORTED`
            * :attr:`SegmentConfigurationState.STATE_NO_PNIC_SPECIFIED_IN_TN`
            * :attr:`SegmentConfigurationState.STATE_INVALID_PNIC_DEVICE_NAME`
            * :attr:`SegmentConfigurationState.STATE_TRANSPORT_NODE_READY`
            * :attr:`SegmentConfigurationState.STATE_VM_NETWORK_EDIT_PENDING`
            *
              :attr:`SegmentConfigurationState.STATE_UNSUPPORTED_DEFAULT_TEAMING_POLICY`
            * :attr:`SegmentConfigurationState.STATE_MPA_DISCONNECTED`
            * :attr:`SegmentConfigurationState.STATE_VM_RENAME_PENDING`
            * :attr:`SegmentConfigurationState.STATE_VM_CONFIG_EDIT_PENDING`
            * :attr:`SegmentConfigurationState.STATE_VM_NETWORK_EDIT_FAILED`
            * :attr:`SegmentConfigurationState.STATE_VM_RENAME_FAILED`
            * :attr:`SegmentConfigurationState.STATE_VM_CONFIG_EDIT_FAILED`
            * :attr:`SegmentConfigurationState.STATE_VM_CONFIG_DISCREPANCY`
            * :attr:`SegmentConfigurationState.STATE_VM_NODE_REFRESH_FAILED`
            *
              :attr:`SegmentConfigurationState.STATE_VM_PLACEMENT_REFRESH_FAILED`
            * :attr:`SegmentConfigurationState.STATE_REGISTRATION_TIMEDOUT`
            
            Gives details of state of desired configuration. Additional enums
            with more details on progress/success/error states are sent for
            edge node. The success states are NODE_READY and
            TRANSPORT_NODE_READY, pending states are {VM_DEPLOYMENT_QUEUED,
            VM_DEPLOYMENT_IN_PROGRESS, REGISTRATION_PENDING} and other values
            indicate failures. \"in_sync\" state indicates that the desired
            configuration has been received by the host to which it applies,
            but is not yet in effect. When the configuration is actually in
            effect, the state will change to \"success\". Please note, failed
            state is deprecated.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  segment_path: :class:`str` or ``None``
        :param segment_path: Segment path
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.details = details
        self.failure_code = failure_code
        self.failure_message = failure_message
        self.state = state
        self.segment_path = segment_path
        VapiStruct.__init__(self)


SegmentConfigurationState._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.segment_configuration_state', {
        'details': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ConfigurationStateElement'))),
        'failure_code': type.OptionalType(type.IntegerType()),
        'failure_message': type.OptionalType(type.StringType()),
        'state': type.OptionalType(type.StringType()),
        'segment_path': type.OptionalType(type.StringType()),
    },
    SegmentConfigurationState,
    False,
    None))



class SegmentCrossSiteTrafficStats(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'last_update_timestamp': 'last_update_timestamp',
                            'rx_stats': 'rx_stats',
                            'segment_path': 'segment_path',
                            'tx_stats': 'tx_stats',
                            }

    def __init__(self,
                 last_update_timestamp=None,
                 rx_stats=None,
                 segment_path=None,
                 tx_stats=None,
                ):
        """
        :type  last_update_timestamp: :class:`long` or ``None``
        :param last_update_timestamp: Timestamp when the l2 forwarder statistics was last updated.
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  rx_stats: :class:`InterSitePortCounters` or ``None``
        :param rx_stats: Total received data counters.
        :type  segment_path: :class:`str` or ``None``
        :param segment_path: Policy path of Segment to attach interface.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  tx_stats: :class:`InterSitePortCounters` or ``None``
        :param tx_stats: Total sent data counters.
        """
        self.last_update_timestamp = last_update_timestamp
        self.rx_stats = rx_stats
        self.segment_path = segment_path
        self.tx_stats = tx_stats
        VapiStruct.__init__(self)


SegmentCrossSiteTrafficStats._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.segment_cross_site_traffic_stats', {
        'last_update_timestamp': type.OptionalType(type.IntegerType()),
        'rx_stats': type.OptionalType(type.ReferenceType(__name__, 'InterSitePortCounters')),
        'segment_path': type.OptionalType(type.StringType()),
        'tx_stats': type.OptionalType(type.ReferenceType(__name__, 'InterSitePortCounters')),
    },
    SegmentCrossSiteTrafficStats,
    False,
    None))



class SegmentDhcpConfig(VapiStruct):
    """
    DHCP IPv4 and IPv6 configurations are extended from this abstract class.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "SegmentDhcpConfig"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    RESOURCE_TYPE_SEGMENTDHCPV4CONFIG = "SegmentDhcpV4Config"
    """


    """
    RESOURCE_TYPE_SEGMENTDHCPV6CONFIG = "SegmentDhcpV6Config"
    """


    """



    _canonical_to_pep_names = {
                            'dns_servers': 'dns_servers',
                            'lease_time': 'lease_time',
                            'resource_type': 'resource_type',
                            'server_address': 'server_address',
                            }

    def __init__(self,
                 dns_servers=None,
                 lease_time=None,
                 resource_type='SegmentDhcpConfig',
                 server_address=None,
                ):
        """
        :type  dns_servers: :class:`list` of :class:`str` or ``None``
        :param dns_servers: IP address of DNS servers for subnet. DNS server IP address must
            belong to the same address family as segment gateway_address
            property. format: ip
        :type  lease_time: :class:`long` or ``None``
        :param lease_time: DHCP lease time in seconds. When specified, this property
            overwrites lease time configured DHCP server config. format: int64
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`SegmentDhcpConfig.RESOURCE_TYPE_SEGMENTDHCPV4CONFIG`
            * :attr:`SegmentDhcpConfig.RESOURCE_TYPE_SEGMENTDHCPV6CONFIG`
        :type  server_address: :class:`str` or ``None``
        :param server_address: IP address of the DHCP server in CIDR format. The server_address is
            mandatory in case this segment has provided a dhcp_config_path and
            it represents a DHCP server config. If this SegmentDhcpConfig is a
            SegmentDhcpV4Config, the address must be an IPv4 address. If this
            is a SegmentDhcpV6Config, the address must be an IPv6 address. This
            address must not overlap the ip-ranges of the subnet, or the
            gateway address of the subnet, or the DHCP static-binding addresses
            of this segment. format: ip-cidr-block
        """
        self.dns_servers = dns_servers
        self.lease_time = lease_time
        self._resource_type = resource_type
        self.server_address = server_address
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

SegmentDhcpConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.segment_dhcp_config', {
        'dns_servers': type.OptionalType(type.ListType(type.StringType())),
        'lease_time': type.OptionalType(type.IntegerType()),
        'resource_type': type.StringType(),
        'server_address': type.OptionalType(type.StringType()),
    },
    SegmentDhcpConfig,
    False,
    None))



class SegmentDhcpV4Config(VapiStruct):
    """
    DHCP configuration of IPv4 subnet in a segment

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "SegmentDhcpV4Config"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'options': 'options',
                            'dns_servers': 'dns_servers',
                            'lease_time': 'lease_time',
                            'resource_type': 'resource_type',
                            'server_address': 'server_address',
                            }

    def __init__(self,
                 options=None,
                 dns_servers=None,
                 lease_time=None,
                 resource_type='SegmentDhcpV4Config',
                 server_address=None,
                ):
        """
        :type  options: :class:`DhcpV4Options` or ``None``
        :param options: IPv4 DHCP options for segment subnet.
        :type  dns_servers: :class:`list` of :class:`str` or ``None``
        :param dns_servers: IP address of DNS servers for subnet. DNS server IP address must
            belong to the same address family as segment gateway_address
            property. format: ip
        :type  lease_time: :class:`long` or ``None``
        :param lease_time: DHCP lease time in seconds. When specified, this property
            overwrites lease time configured DHCP server config. format: int64
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`SegmentDhcpConfig.RESOURCE_TYPE_SEGMENTDHCPV4CONFIG`
            * :attr:`SegmentDhcpConfig.RESOURCE_TYPE_SEGMENTDHCPV6CONFIG`
        :type  server_address: :class:`str` or ``None``
        :param server_address: IP address of the DHCP server in CIDR format. The server_address is
            mandatory in case this segment has provided a dhcp_config_path and
            it represents a DHCP server config. If this SegmentDhcpConfig is a
            SegmentDhcpV4Config, the address must be an IPv4 address. If this
            is a SegmentDhcpV6Config, the address must be an IPv6 address. This
            address must not overlap the ip-ranges of the subnet, or the
            gateway address of the subnet, or the DHCP static-binding addresses
            of this segment. format: ip-cidr-block
        """
        self.options = options
        self.dns_servers = dns_servers
        self.lease_time = lease_time
        self._resource_type = resource_type
        self.server_address = server_address
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

SegmentDhcpV4Config._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.segment_dhcp_v4_config', {
        'options': type.OptionalType(type.ReferenceType(__name__, 'DhcpV4Options')),
        'dns_servers': type.OptionalType(type.ListType(type.StringType())),
        'lease_time': type.OptionalType(type.IntegerType()),
        'resource_type': type.StringType(),
        'server_address': type.OptionalType(type.StringType()),
    },
    SegmentDhcpV4Config,
    False,
    None))



class SegmentDhcpV6Config(VapiStruct):
    """
    DHCP configuration of IPv6 subnet in a segment

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "SegmentDhcpV6Config"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'domain_names': 'domain_names',
                            'excluded_ranges': 'excluded_ranges',
                            'preferred_time': 'preferred_time',
                            'sntp_servers': 'sntp_servers',
                            'dns_servers': 'dns_servers',
                            'lease_time': 'lease_time',
                            'resource_type': 'resource_type',
                            'server_address': 'server_address',
                            }

    def __init__(self,
                 domain_names=None,
                 excluded_ranges=None,
                 preferred_time=None,
                 sntp_servers=None,
                 dns_servers=None,
                 lease_time=None,
                 resource_type='SegmentDhcpV6Config',
                 server_address=None,
                ):
        """
        :type  domain_names: :class:`list` of :class:`str` or ``None``
        :param domain_names: Domain names for subnet.
        :type  excluded_ranges: :class:`list` of :class:`str` or ``None``
        :param excluded_ranges: Excluded addresses to define dynamic ip allocation ranges. format:
            address-or-block-or-range
        :type  preferred_time: :class:`long` or ``None``
        :param preferred_time: The length of time that a valid address is preferred. When the
            preferred lifetime expires, the address becomes deprecated. format:
            int64
        :type  sntp_servers: :class:`list` of :class:`str` or ``None``
        :param sntp_servers: IPv6 address of SNTP servers for subnet. format: ipv6
        :type  dns_servers: :class:`list` of :class:`str` or ``None``
        :param dns_servers: IP address of DNS servers for subnet. DNS server IP address must
            belong to the same address family as segment gateway_address
            property. format: ip
        :type  lease_time: :class:`long` or ``None``
        :param lease_time: DHCP lease time in seconds. When specified, this property
            overwrites lease time configured DHCP server config. format: int64
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`SegmentDhcpConfig.RESOURCE_TYPE_SEGMENTDHCPV4CONFIG`
            * :attr:`SegmentDhcpConfig.RESOURCE_TYPE_SEGMENTDHCPV6CONFIG`
        :type  server_address: :class:`str` or ``None``
        :param server_address: IP address of the DHCP server in CIDR format. The server_address is
            mandatory in case this segment has provided a dhcp_config_path and
            it represents a DHCP server config. If this SegmentDhcpConfig is a
            SegmentDhcpV4Config, the address must be an IPv4 address. If this
            is a SegmentDhcpV6Config, the address must be an IPv6 address. This
            address must not overlap the ip-ranges of the subnet, or the
            gateway address of the subnet, or the DHCP static-binding addresses
            of this segment. format: ip-cidr-block
        """
        self.domain_names = domain_names
        self.excluded_ranges = excluded_ranges
        self.preferred_time = preferred_time
        self.sntp_servers = sntp_servers
        self.dns_servers = dns_servers
        self.lease_time = lease_time
        self._resource_type = resource_type
        self.server_address = server_address
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

SegmentDhcpV6Config._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.segment_dhcp_v6_config', {
        'domain_names': type.OptionalType(type.ListType(type.StringType())),
        'excluded_ranges': type.OptionalType(type.ListType(type.StringType())),
        'preferred_time': type.OptionalType(type.IntegerType()),
        'sntp_servers': type.OptionalType(type.ListType(type.StringType())),
        'dns_servers': type.OptionalType(type.ListType(type.StringType())),
        'lease_time': type.OptionalType(type.IntegerType()),
        'resource_type': type.StringType(),
        'server_address': type.OptionalType(type.StringType()),
    },
    SegmentDhcpV6Config,
    False,
    None))



class SegmentDiscoveryProfileBindingMap(VapiStruct):
    """
    This entity will be used to establish association between discovery profile
    and Segment. Using this entity, user can specify intent for applying
    discovery profile to particular segments.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'ip_discovery_profile_path': 'ip_discovery_profile_path',
                            'mac_discovery_profile_path': 'mac_discovery_profile_path',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 ip_discovery_profile_path=None,
                 mac_discovery_profile_path=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  ip_discovery_profile_path: :class:`str` or ``None``
        :param ip_discovery_profile_path: PolicyPath of associated IP Discovery Profile
        :type  mac_discovery_profile_path: :class:`str` or ``None``
        :param mac_discovery_profile_path: PolicyPath of associated Mac Discovery Profile
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.ip_discovery_profile_path = ip_discovery_profile_path
        self.mac_discovery_profile_path = mac_discovery_profile_path
        VapiStruct.__init__(self)


SegmentDiscoveryProfileBindingMap._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.segment_discovery_profile_binding_map', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'ip_discovery_profile_path': type.OptionalType(type.StringType()),
        'mac_discovery_profile_path': type.OptionalType(type.StringType()),
    },
    SegmentDiscoveryProfileBindingMap,
    False,
    None))



class SegmentDiscoveryProfileBindingMapListResult(VapiStruct):
    """
    Paged collection of Segment Discovery Profile Binding Maps

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`SegmentDiscoveryProfileBindingMap` or ``None``
        :param results: Segment Discovery Profile Binding Map list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


SegmentDiscoveryProfileBindingMapListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.segment_discovery_profile_binding_map_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'SegmentDiscoveryProfileBindingMap'))),
    },
    SegmentDiscoveryProfileBindingMapListResult,
    False,
    None))



class SegmentExtraConfig(VapiStruct):
    """
    Segment extra config is intended for supporting vendor specific
    configuration on the data path, it can be set as key value string pairs on
    either segment or segment port.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'config_pair': 'config_pair',
                            }

    def __init__(self,
                 config_pair=None,
                ):
        """
        :type  config_pair: :class:`UnboundedKeyValuePair` or ``None``
        :param config_pair: Key value pair in string for the configuration
        """
        self.config_pair = config_pair
        VapiStruct.__init__(self)


SegmentExtraConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.segment_extra_config', {
        'config_pair': type.OptionalType(type.ReferenceType(__name__, 'UnboundedKeyValuePair')),
    },
    SegmentExtraConfig,
    False,
    None))



class SegmentL2ForwarderSiteSpanInfo(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'inter_site_forwarder_status': 'inter_site_forwarder_status',
                            'last_update_timestamp': 'last_update_timestamp',
                            'remote_macs_per_site': 'remote_macs_per_site',
                            'segment_path': 'segment_path',
                            }

    def __init__(self,
                 inter_site_forwarder_status=None,
                 last_update_timestamp=None,
                 remote_macs_per_site=None,
                 segment_path=None,
                ):
        """
        :type  inter_site_forwarder_status: :class:`list` of :class:`L2ForwarderStatusPerNode` or ``None``
        :param inter_site_forwarder_status: Inter-site forwarder status per node.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_update_timestamp: :class:`long` or ``None``
        :param last_update_timestamp: Timestamp when the L2 forwarder remote mac addresses was last
            updated. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  remote_macs_per_site: :class:`list` of :class:`L2ForwarderRemoteMacsPerSite` or ``None``
        :param remote_macs_per_site: L2 forwarder remote mac addresses per site for logical switch.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  segment_path: :class:`str` or ``None``
        :param segment_path: Policy path of a segment.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.inter_site_forwarder_status = inter_site_forwarder_status
        self.last_update_timestamp = last_update_timestamp
        self.remote_macs_per_site = remote_macs_per_site
        self.segment_path = segment_path
        VapiStruct.__init__(self)


SegmentL2ForwarderSiteSpanInfo._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.segment_l2_forwarder_site_span_info', {
        'inter_site_forwarder_status': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'L2ForwarderStatusPerNode'))),
        'last_update_timestamp': type.OptionalType(type.IntegerType()),
        'remote_macs_per_site': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'L2ForwarderRemoteMacsPerSite'))),
        'segment_path': type.OptionalType(type.StringType()),
    },
    SegmentL2ForwarderSiteSpanInfo,
    False,
    None))



class SegmentListResult(VapiStruct):
    """
    Paged collection of Segments

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`Segment` or ``None``
        :param results: Segment list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


SegmentListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.segment_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Segment'))),
    },
    SegmentListResult,
    False,
    None))



class SegmentMonitoringProfileBindingMap(VapiStruct):
    """
    This entity will be used to establish association between monitoring
    profile and Segment. Using this entity, you can specify intent for applying
    monitoring profile to particular segment.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'ipfix_l2_profile_path': 'ipfix_l2_profile_path',
                            'port_mirroring_profile_path': 'port_mirroring_profile_path',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 ipfix_l2_profile_path=None,
                 port_mirroring_profile_path=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  ipfix_l2_profile_path: :class:`str` or ``None``
        :param ipfix_l2_profile_path: PolicyPath of associated IPFIX L2 Profile
        :type  port_mirroring_profile_path: :class:`str` or ``None``
        :param port_mirroring_profile_path: PolicyPath of associated Port Mirroring Profile
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.ipfix_l2_profile_path = ipfix_l2_profile_path
        self.port_mirroring_profile_path = port_mirroring_profile_path
        VapiStruct.__init__(self)


SegmentMonitoringProfileBindingMap._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.segment_monitoring_profile_binding_map', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'ipfix_l2_profile_path': type.OptionalType(type.StringType()),
        'port_mirroring_profile_path': type.OptionalType(type.StringType()),
    },
    SegmentMonitoringProfileBindingMap,
    False,
    None))



class SegmentMonitoringProfileBindingMapListResult(VapiStruct):
    """
    Paged collection of Segment Monitoring Profile Binding Maps

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`SegmentMonitoringProfileBindingMap` or ``None``
        :param results: Segment Monitoring Profile Binding Map list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


SegmentMonitoringProfileBindingMapListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.segment_monitoring_profile_binding_map_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'SegmentMonitoringProfileBindingMap'))),
    },
    SegmentMonitoringProfileBindingMapListResult,
    False,
    None))



class SegmentPort(VapiStruct):
    """
    Policy port will create LogicalPort on LogicalSwitch corresponding to the
    Segment. Address bindings cannot be removed after realization.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    ADMIN_STATE_UP = "UP"
    """


    """
    ADMIN_STATE_DOWN = "DOWN"
    """


    """
    INIT_STATE_VLAN = "UNBLOCKED_VLAN"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'address_bindings': 'address_bindings',
                            'admin_state': 'admin_state',
                            'attachment': 'attachment',
                            'extra_configs': 'extra_configs',
                            'ignored_address_bindings': 'ignored_address_bindings',
                            'init_state': 'init_state',
                            'source_site_id': 'source_site_id',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 address_bindings=None,
                 admin_state=None,
                 attachment=None,
                 extra_configs=None,
                 ignored_address_bindings=None,
                 init_state=None,
                 source_site_id=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  address_bindings: :class:`list` of :class:`PortAddressBindingEntry` or ``None``
        :param address_bindings: Static address binding used for the port.
        :type  admin_state: :class:`str` or ``None``
        :param admin_state: Possible values are: 
            
            * :attr:`SegmentPort.ADMIN_STATE_UP`
            * :attr:`SegmentPort.ADMIN_STATE_DOWN`
            
             Represents desired state of the segment port
        :type  attachment: :class:`PortAttachment` or ``None``
        :param attachment: Only VIF attachment is supported
        :type  extra_configs: :class:`list` of :class:`SegmentExtraConfig` or ``None``
        :param extra_configs: This property could be used for vendor specific configuration in
            key value string pairs. Segment port setting will override segment
            setting if the same key was set on both segment and segment port.
        :type  ignored_address_bindings: :class:`list` of :class:`PortAddressBindingEntry` or ``None``
        :param ignored_address_bindings: IP Discovery module uses various mechanisms to discover address
            bindings being used on each segment port. If a user would like to
            ignore any specific discovered address bindings or prevent the
            discovery of a particular set of discovered bindings, then those
            address bindings can be provided here. Currently IP range in CIDR
            format is not supported.
        :type  init_state: :class:`str` or ``None``
        :param init_state: Possible values are: 
            
            * :attr:`SegmentPort.INIT_STATE_VLAN`
            
            Set initial state when a new logical port is created.
            'UNBLOCKED_VLAN' means new port will be unblocked on traffic in
            creation, also VLAN will be set with corresponding logical switch
            setting. This port setting can only be configured at port creation,
            and cannot be modified.
        :type  source_site_id: :class:`str` or ``None``
        :param source_site_id: This field will refer to the source site on which the segment port
            is discovered. This field is populated by GM, when it receives
            corresponding notification from LM.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.address_bindings = address_bindings
        self.admin_state = admin_state
        self.attachment = attachment
        self.extra_configs = extra_configs
        self.ignored_address_bindings = ignored_address_bindings
        self.init_state = init_state
        self.source_site_id = source_site_id
        VapiStruct.__init__(self)


SegmentPort._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.segment_port', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'address_bindings': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PortAddressBindingEntry'))),
        'admin_state': type.OptionalType(type.StringType()),
        'attachment': type.OptionalType(type.ReferenceType(__name__, 'PortAttachment')),
        'extra_configs': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'SegmentExtraConfig'))),
        'ignored_address_bindings': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'PortAddressBindingEntry'))),
        'init_state': type.OptionalType(type.StringType()),
        'source_site_id': type.OptionalType(type.StringType()),
    },
    SegmentPort,
    False,
    None))



class SegmentPortListResult(VapiStruct):
    """
    List SegmentPort objects

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`SegmentPort` or ``None``
        :param results: Place holder for the list result
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


SegmentPortListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.segment_port_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'SegmentPort'))),
    },
    SegmentPortListResult,
    False,
    None))



class SegmentPortStatistics(VapiStruct):
    """
    Segment port statistics on specific Enforcement Point.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'rx_bytes': 'rx_bytes',
                            'rx_packets': 'rx_packets',
                            'tx_bytes': 'tx_bytes',
                            'tx_packets': 'tx_packets',
                            'dropped_by_security_packets': 'dropped_by_security_packets',
                            'mac_learning': 'mac_learning',
                            'last_update_timestamp': 'last_update_timestamp',
                            'logical_port_id': 'logical_port_id',
                            }

    def __init__(self,
                 rx_bytes=None,
                 rx_packets=None,
                 tx_bytes=None,
                 tx_packets=None,
                 dropped_by_security_packets=None,
                 mac_learning=None,
                 last_update_timestamp=None,
                 logical_port_id=None,
                ):
        """
        :type  rx_bytes: :class:`DataCounter` or ``None``
        :param rx_bytes: 
        :type  rx_packets: :class:`DataCounter` or ``None``
        :param rx_packets: 
        :type  tx_bytes: :class:`DataCounter` or ``None``
        :param tx_bytes: 
        :type  tx_packets: :class:`DataCounter` or ``None``
        :param tx_packets: 
        :type  dropped_by_security_packets: :class:`PacketsDroppedBySecurity` or ``None``
        :param dropped_by_security_packets: 
        :type  mac_learning: :class:`MacLearningCounters` or ``None``
        :param mac_learning: 
        :type  last_update_timestamp: :class:`long` or ``None``
        :param last_update_timestamp: Timestamp when the data was last updated; unset if data source has
            never updated the data. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  logical_port_id: :class:`str` or ``None``
        :param logical_port_id: The id of the logical port
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.rx_bytes = rx_bytes
        self.rx_packets = rx_packets
        self.tx_bytes = tx_bytes
        self.tx_packets = tx_packets
        self.dropped_by_security_packets = dropped_by_security_packets
        self.mac_learning = mac_learning
        self.last_update_timestamp = last_update_timestamp
        self.logical_port_id = logical_port_id
        VapiStruct.__init__(self)


SegmentPortStatistics._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.segment_port_statistics', {
        'rx_bytes': type.OptionalType(type.ReferenceType(__name__, 'DataCounter')),
        'rx_packets': type.OptionalType(type.ReferenceType(__name__, 'DataCounter')),
        'tx_bytes': type.OptionalType(type.ReferenceType(__name__, 'DataCounter')),
        'tx_packets': type.OptionalType(type.ReferenceType(__name__, 'DataCounter')),
        'dropped_by_security_packets': type.OptionalType(type.ReferenceType(__name__, 'PacketsDroppedBySecurity')),
        'mac_learning': type.OptionalType(type.ReferenceType(__name__, 'MacLearningCounters')),
        'last_update_timestamp': type.OptionalType(type.IntegerType()),
        'logical_port_id': type.OptionalType(type.StringType()),
    },
    SegmentPortStatistics,
    False,
    None))



class SegmentQosProfileBindingMap(VapiStruct):
    """
    This entity will be used to establish association between qos profile and
    Segment. Using this entity, you can specify intent for applying qos profile
    to particular segment.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'qos_profile_path': 'qos_profile_path',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 qos_profile_path=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  qos_profile_path: :class:`str` or ``None``
        :param qos_profile_path: PolicyPath of associated QoS Profile
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.qos_profile_path = qos_profile_path
        VapiStruct.__init__(self)


SegmentQosProfileBindingMap._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.segment_qos_profile_binding_map', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'qos_profile_path': type.OptionalType(type.StringType()),
    },
    SegmentQosProfileBindingMap,
    False,
    None))



class SegmentQosProfileBindingMapListResult(VapiStruct):
    """
    Paged collection of Segment QoS Profile Binding Maps

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`SegmentQosProfileBindingMap` or ``None``
        :param results: Segment QoS Profile Binding Map list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


SegmentQosProfileBindingMapListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.segment_qos_profile_binding_map_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'SegmentQosProfileBindingMap'))),
    },
    SegmentQosProfileBindingMapListResult,
    False,
    None))



class SegmentSecurityProfile(VapiStruct):
    """
    Security features extended by policy operations for securing logical
    segments.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'bpdu_filter_allow': 'bpdu_filter_allow',
                            'bpdu_filter_enable': 'bpdu_filter_enable',
                            'dhcp_client_block_enabled': 'dhcp_client_block_enabled',
                            'dhcp_client_block_v6_enabled': 'dhcp_client_block_v6_enabled',
                            'dhcp_server_block_enabled': 'dhcp_server_block_enabled',
                            'dhcp_server_block_v6_enabled': 'dhcp_server_block_v6_enabled',
                            'non_ip_traffic_block_enabled': 'non_ip_traffic_block_enabled',
                            'ra_guard_enabled': 'ra_guard_enabled',
                            'rate_limits': 'rate_limits',
                            'rate_limits_enabled': 'rate_limits_enabled',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 bpdu_filter_allow=None,
                 bpdu_filter_enable=None,
                 dhcp_client_block_enabled=None,
                 dhcp_client_block_v6_enabled=None,
                 dhcp_server_block_enabled=None,
                 dhcp_server_block_v6_enabled=None,
                 non_ip_traffic_block_enabled=None,
                 ra_guard_enabled=None,
                 rate_limits=None,
                 rate_limits_enabled=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  bpdu_filter_allow: :class:`list` of :class:`str` or ``None``
        :param bpdu_filter_allow: Pre-defined list of allowed MAC addresses to be excluded from BPDU
            filtering. List of allowed MACs - 01:80:c2:00:00:00,
            01:80:c2:00:00:01, 01:80:c2:00:00:02, 01:80:c2:00:00:03,
            01:80:c2:00:00:04, 01:80:c2:00:00:05, 01:80:c2:00:00:06,
            01:80:c2:00:00:07, 01:80:c2:00:00:08, 01:80:c2:00:00:09,
            01:80:c2:00:00:0a, 01:80:c2:00:00:0b, 01:80:c2:00:00:0c,
            01:80:c2:00:00:0d, 01:80:c2:00:00:0e, 01:80:c2:00:00:0f,
            00:e0:2b:00:00:00, 00:e0:2b:00:00:04, 00:e0:2b:00:00:06,
            01:00:0c:00:00:00, 01:00:0c:cc:cc:cc, 01:00:0c:cc:cc:cd,
            01:00:0c:cd:cd:cd, 01:00:0c:cc:cc:c0, 01:00:0c:cc:cc:c1,
            01:00:0c:cc:cc:c2, 01:00:0c:cc:cc:c3, 01:00:0c:cc:cc:c4,
            01:00:0c:cc:cc:c5, 01:00:0c:cc:cc:c6, 01:00:0c:cc:cc:c7 format:
            mac-address
        :type  bpdu_filter_enable: :class:`bool` or ``None``
        :param bpdu_filter_enable: Indicates whether BPDU filter is enabled. BPDU filtering is enabled
            by default.
        :type  dhcp_client_block_enabled: :class:`bool` or ``None``
        :param dhcp_client_block_enabled: Filters DHCP server and/or client traffic. DHCP server blocking is
            enabled and client blocking is disabled by default.
        :type  dhcp_client_block_v6_enabled: :class:`bool` or ``None``
        :param dhcp_client_block_v6_enabled: Filters DHCP server and/or client IPv6 traffic. DHCP server
            blocking is enabled and client blocking is disabled by default.
        :type  dhcp_server_block_enabled: :class:`bool` or ``None``
        :param dhcp_server_block_enabled: Filters DHCP server and/or client traffic. DHCP server blocking is
            enabled and client blocking is disabled by default.
        :type  dhcp_server_block_v6_enabled: :class:`bool` or ``None``
        :param dhcp_server_block_v6_enabled: Filters DHCP server and/or client IPv6 traffic. DHCP server
            blocking is enabled and client blocking is disabled by default.
        :type  non_ip_traffic_block_enabled: :class:`bool` or ``None``
        :param non_ip_traffic_block_enabled: A flag to block all traffic except IP/(G)ARP/BPDU.
        :type  ra_guard_enabled: :class:`bool` or ``None``
        :param ra_guard_enabled: Enable or disable Router Advertisement Guard.
        :type  rate_limits: :class:`TrafficRateLimits` or ``None``
        :param rate_limits: Allows configuration of rate limits for broadcast and multicast
            traffic. Rate limiting is disabled by default
        :type  rate_limits_enabled: :class:`bool` or ``None``
        :param rate_limits_enabled: Enable or disable Rate Limits
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.bpdu_filter_allow = bpdu_filter_allow
        self.bpdu_filter_enable = bpdu_filter_enable
        self.dhcp_client_block_enabled = dhcp_client_block_enabled
        self.dhcp_client_block_v6_enabled = dhcp_client_block_v6_enabled
        self.dhcp_server_block_enabled = dhcp_server_block_enabled
        self.dhcp_server_block_v6_enabled = dhcp_server_block_v6_enabled
        self.non_ip_traffic_block_enabled = non_ip_traffic_block_enabled
        self.ra_guard_enabled = ra_guard_enabled
        self.rate_limits = rate_limits
        self.rate_limits_enabled = rate_limits_enabled
        VapiStruct.__init__(self)


SegmentSecurityProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.segment_security_profile', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'bpdu_filter_allow': type.OptionalType(type.ListType(type.StringType())),
        'bpdu_filter_enable': type.OptionalType(type.BooleanType()),
        'dhcp_client_block_enabled': type.OptionalType(type.BooleanType()),
        'dhcp_client_block_v6_enabled': type.OptionalType(type.BooleanType()),
        'dhcp_server_block_enabled': type.OptionalType(type.BooleanType()),
        'dhcp_server_block_v6_enabled': type.OptionalType(type.BooleanType()),
        'non_ip_traffic_block_enabled': type.OptionalType(type.BooleanType()),
        'ra_guard_enabled': type.OptionalType(type.BooleanType()),
        'rate_limits': type.OptionalType(type.ReferenceType(__name__, 'TrafficRateLimits')),
        'rate_limits_enabled': type.OptionalType(type.BooleanType()),
    },
    SegmentSecurityProfile,
    False,
    None))



class SegmentSecurityProfileBindingMap(VapiStruct):
    """
    Contains the binding relationship between segment and security profile.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'segment_security_profile_path': 'segment_security_profile_path',
                            'spoofguard_profile_path': 'spoofguard_profile_path',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 segment_security_profile_path=None,
                 spoofguard_profile_path=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  segment_security_profile_path: :class:`str` or ``None``
        :param segment_security_profile_path: The policy path of the asscociated Segment Security profile
        :type  spoofguard_profile_path: :class:`str` or ``None``
        :param spoofguard_profile_path: The policy path of the asscociated SpoofGuard profile
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.segment_security_profile_path = segment_security_profile_path
        self.spoofguard_profile_path = spoofguard_profile_path
        VapiStruct.__init__(self)


SegmentSecurityProfileBindingMap._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.segment_security_profile_binding_map', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'segment_security_profile_path': type.OptionalType(type.StringType()),
        'spoofguard_profile_path': type.OptionalType(type.StringType()),
    },
    SegmentSecurityProfileBindingMap,
    False,
    None))



class SegmentSecurityProfileBindingMapListResult(VapiStruct):
    """
    Paged collection of segment security profile binding maps

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`SegmentSecurityProfileBindingMap` or ``None``
        :param results: Segment security profile binding map list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


SegmentSecurityProfileBindingMapListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.segment_security_profile_binding_map_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'SegmentSecurityProfileBindingMap'))),
    },
    SegmentSecurityProfileBindingMapListResult,
    False,
    None))



class SegmentSecurityProfileListResult(VapiStruct):
    """
    Paged collection of segment security profiles

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`SegmentSecurityProfile` or ``None``
        :param results: Segment Security profile list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


SegmentSecurityProfileListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.segment_security_profile_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'SegmentSecurityProfile'))),
    },
    SegmentSecurityProfileListResult,
    False,
    None))



class SegmentStatistics(VapiStruct):
    """
    Segment statistics on specific Enforcement Point.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'rx_bytes': 'rx_bytes',
                            'rx_packets': 'rx_packets',
                            'tx_bytes': 'tx_bytes',
                            'tx_packets': 'tx_packets',
                            'dropped_by_security_packets': 'dropped_by_security_packets',
                            'mac_learning': 'mac_learning',
                            'last_update_timestamp': 'last_update_timestamp',
                            'logical_switch_id': 'logical_switch_id',
                            }

    def __init__(self,
                 rx_bytes=None,
                 rx_packets=None,
                 tx_bytes=None,
                 tx_packets=None,
                 dropped_by_security_packets=None,
                 mac_learning=None,
                 last_update_timestamp=None,
                 logical_switch_id=None,
                ):
        """
        :type  rx_bytes: :class:`DataCounter` or ``None``
        :param rx_bytes: 
        :type  rx_packets: :class:`DataCounter` or ``None``
        :param rx_packets: 
        :type  tx_bytes: :class:`DataCounter` or ``None``
        :param tx_bytes: 
        :type  tx_packets: :class:`DataCounter` or ``None``
        :param tx_packets: 
        :type  dropped_by_security_packets: :class:`PacketsDroppedBySecurity` or ``None``
        :param dropped_by_security_packets: 
        :type  mac_learning: :class:`MacLearningCounters` or ``None``
        :param mac_learning: 
        :type  last_update_timestamp: :class:`long` or ``None``
        :param last_update_timestamp: Timestamp when the data was last updated; unset if data source has
            never updated the data. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  logical_switch_id: :class:`str` or ``None``
        :param logical_switch_id: The id of the logical Switch
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.rx_bytes = rx_bytes
        self.rx_packets = rx_packets
        self.tx_bytes = tx_bytes
        self.tx_packets = tx_packets
        self.dropped_by_security_packets = dropped_by_security_packets
        self.mac_learning = mac_learning
        self.last_update_timestamp = last_update_timestamp
        self.logical_switch_id = logical_switch_id
        VapiStruct.__init__(self)


SegmentStatistics._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.segment_statistics', {
        'rx_bytes': type.OptionalType(type.ReferenceType(__name__, 'DataCounter')),
        'rx_packets': type.OptionalType(type.ReferenceType(__name__, 'DataCounter')),
        'tx_bytes': type.OptionalType(type.ReferenceType(__name__, 'DataCounter')),
        'tx_packets': type.OptionalType(type.ReferenceType(__name__, 'DataCounter')),
        'dropped_by_security_packets': type.OptionalType(type.ReferenceType(__name__, 'PacketsDroppedBySecurity')),
        'mac_learning': type.OptionalType(type.ReferenceType(__name__, 'MacLearningCounters')),
        'last_update_timestamp': type.OptionalType(type.IntegerType()),
        'logical_switch_id': type.OptionalType(type.StringType()),
    },
    SegmentStatistics,
    False,
    None))



class SegmentSubnet(VapiStruct):
    """
    Subnet configuration for segment

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'dhcp_config': 'dhcp_config',
                            'dhcp_ranges': 'dhcp_ranges',
                            'gateway_address': 'gateway_address',
                            'network': 'network',
                            }

    def __init__(self,
                 dhcp_config=None,
                 dhcp_ranges=None,
                 gateway_address=None,
                 network=None,
                ):
        """
        :type  dhcp_config: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param dhcp_config: Additional DHCP configuration for current subnet.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`SegmentDhcpConfig`. When methods return a value of this
            class as a return value, the attribute will contain all the
            attributes defined in :class:`SegmentDhcpConfig`.
        :type  dhcp_ranges: :class:`list` of :class:`str` or ``None``
        :param dhcp_ranges: DHCP address ranges are used for dynamic IP allocation. Supports
            address range and CIDR formats. First valid host address from the
            first value is assigned to DHCP server IP address. Existing values
            cannot be deleted or modified, but additional DHCP ranges can be
            added. format: address-or-block-or-range
        :type  gateway_address: :class:`str` or ``None``
        :param gateway_address: Gateway IP address in CIDR format for both IPv4 and IPv6. format:
            ip-cidr-block
        :type  network: :class:`str` or ``None``
        :param network: Network CIDR for this subnet calculated from gateway_addresses and
            prefix_len.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.dhcp_config = dhcp_config
        self.dhcp_ranges = dhcp_ranges
        self.gateway_address = gateway_address
        self.network = network
        VapiStruct.__init__(self)


SegmentSubnet._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.segment_subnet', {
        'dhcp_config': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'SegmentDhcpConfig')])),
        'dhcp_ranges': type.OptionalType(type.ListType(type.StringType())),
        'gateway_address': type.OptionalType(type.StringType()),
        'network': type.OptionalType(type.StringType()),
    },
    SegmentSubnet,
    False,
    None))



class SelectableResourceReference(VapiStruct):
    """
    Resources to take action on

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'is_valid': 'is_valid',
                            'target_display_name': 'target_display_name',
                            'target_id': 'target_id',
                            'target_type': 'target_type',
                            'selected': 'selected',
                            }

    def __init__(self,
                 is_valid=None,
                 target_display_name=None,
                 target_id=None,
                 target_type=None,
                 selected=None,
                ):
        """
        :type  is_valid: :class:`bool` or ``None``
        :param is_valid: Will be set to false if the referenced NSX resource has been
            deleted.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  target_display_name: :class:`str` or ``None``
        :param target_display_name: Display name of the NSX resource.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  target_id: :class:`str` or ``None``
        :param target_id: Identifier of the NSX resource.
        :type  target_type: :class:`str` or ``None``
        :param target_type: Type of the NSX resource.
        :type  selected: :class:`bool` or ``None``
        :param selected: Set to true if this resource has been selected to be acted upon
        """
        self.is_valid = is_valid
        self.target_display_name = target_display_name
        self.target_id = target_id
        self.target_type = target_type
        self.selected = selected
        VapiStruct.__init__(self)


SelectableResourceReference._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.selectable_resource_reference', {
        'is_valid': type.OptionalType(type.BooleanType()),
        'target_display_name': type.OptionalType(type.StringType()),
        'target_id': type.OptionalType(type.StringType()),
        'target_type': type.OptionalType(type.StringType()),
        'selected': type.OptionalType(type.BooleanType()),
    },
    SelectableResourceReference,
    False,
    None))



class SelfResourceLink(VapiStruct):
    """
    The server will populate this field when returing the resource. Ignored on
    PUT and POST.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'action': 'action',
                            'href': 'href',
                            'rel': 'rel',
                            }

    def __init__(self,
                 action=None,
                 href=None,
                 rel=None,
                ):
        """
        :type  action: :class:`str` or ``None``
        :param action: Optional action
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  href: :class:`str` or ``None``
        :param href: Link to resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  rel: :class:`str` or ``None``
        :param rel: Custom relation type (follows RFC 5988 where appropriate
            definitions exist)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.action = action
        self.href = href
        self.rel = rel
        VapiStruct.__init__(self)


SelfResourceLink._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.self_resource_link', {
        'action': type.OptionalType(type.StringType()),
        'href': type.OptionalType(type.StringType()),
        'rel': type.OptionalType(type.StringType()),
    },
    SelfResourceLink,
    False,
    None))



class Service(VapiStruct):
    """
    Used while defining a CommunicationEntry. A service may have multiple
    service entries.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'is_default': 'is_default',
                            'service_entries': 'service_entries',
                            'service_type': 'service_type',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 is_default=None,
                 service_entries=None,
                 service_type=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  is_default: :class:`bool` or ``None``
        :param is_default: The flag, if true, indicates that service is created in the system
            by default. Such default services can't be modified/deleted.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  service_entries: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param service_entries: Service type
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ServiceEntry`. When methods return a value of this class as
            a return value, the attribute will contain all the attributes
            defined in :class:`ServiceEntry`.
        :type  service_type: :class:`str` or ``None``
        :param service_type: Type of service, EITHER or NON_ETHER
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.is_default = is_default
        self.service_entries = service_entries
        self.service_type = service_type
        VapiStruct.__init__(self)


Service._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.service', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'is_default': type.OptionalType(type.BooleanType()),
        'service_entries': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ServiceEntry')]))),
        'service_type': type.OptionalType(type.StringType()),
    },
    Service,
    False,
    None))



class ServiceCapability(VapiStruct):
    """
    Service capabilities that will be inherited by service VMs created using a
    service definition that contains this service capability.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'can_decrement_si': 'can_decrement_si',
                            'nsh_liveness_support_enabled': 'nsh_liveness_support_enabled',
                            }

    def __init__(self,
                 can_decrement_si=None,
                 nsh_liveness_support_enabled=None,
                ):
        """
        :type  can_decrement_si: :class:`bool` or ``None``
        :param can_decrement_si: Indicating whether service is configured to decrement SI field in
            NSH metadata.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  nsh_liveness_support_enabled: :class:`bool` or ``None``
        :param nsh_liveness_support_enabled: Indicating whether service supports NSH liveness detection.
        """
        self.can_decrement_si = can_decrement_si
        self.nsh_liveness_support_enabled = nsh_liveness_support_enabled
        VapiStruct.__init__(self)


ServiceCapability._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.service_capability', {
        'can_decrement_si': type.OptionalType(type.BooleanType()),
        'nsh_liveness_support_enabled': type.OptionalType(type.BooleanType()),
    },
    ServiceCapability,
    False,
    None))



class ServiceChainMapping(VapiStruct):
    """
    A ServiceInsertionServiceProfile can be part of multiple ServiceChains.
    ServiceChainMapping for a particular profile will contain a list of all the
    ServiceChains it's part of. Each Mapping will also contain some metadata to
    uniquely identify a profile from other profiles.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    DIRECTION_FORWARD = "FORWARD"
    """


    """
    DIRECTION_REVERSE = "REVERSE"
    """


    """



    _canonical_to_pep_names = {
                            'direction': 'direction',
                            'service_chain_id': 'service_chain_id',
                            'service_index': 'service_index',
                            }

    def __init__(self,
                 direction=None,
                 service_chain_id=None,
                 service_index=None,
                ):
        """
        :type  direction: :class:`str` or ``None``
        :param direction: Possible values are: 
            
            * :attr:`ServiceChainMapping.DIRECTION_FORWARD`
            * :attr:`ServiceChainMapping.DIRECTION_REVERSE`
            
            Each ServiceChain has forward_path_service_profiles and
            reverse_path_service_profiles. This property will indicate which of
            them being used. FORWARD - forward_path_service_profiles REVERSE -
            reverse_path_service_profiles
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  service_chain_id: :class:`str` or ``None``
        :param service_chain_id: A unique id generated for every ServiceChain. This is not a uuid.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  service_index: :class:`long` or ``None``
        :param service_index: Service Index represents a numerical position of a
            ServiceInsertionServiceProfile in a ServiceChain. It will be in
            reverse order. Service Index can point to either
            forward_path_service_profiles or reverse_path_service_profiles
            indicated by direction property. Example - For a ServiceChain
            A-B-C, A will have index of 3, B will have index of 2 and C will
            have index of 1. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.direction = direction
        self.service_chain_id = service_chain_id
        self.service_index = service_index
        VapiStruct.__init__(self)


ServiceChainMapping._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.service_chain_mapping', {
        'direction': type.OptionalType(type.StringType()),
        'service_chain_id': type.OptionalType(type.StringType()),
        'service_index': type.OptionalType(type.IntegerType()),
    },
    ServiceChainMapping,
    False,
    None))



class ServiceChainMappingListResult(VapiStruct):
    """
    Service Chain Mapping List

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`ServiceChainMapping` or ``None``
        :param results: List of the Service Chain Mappings. The list has to be homogenous.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


ServiceChainMappingListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.service_chain_mapping_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ServiceChainMapping'))),
    },
    ServiceChainMappingListResult,
    False,
    None))



class ServiceDefinition(VapiStruct):
    """
    Registering a Service is the first step in the ServiceInsertion mechanism.
    A ServiceDefinition is used to create a service.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    ATTACHMENT_POINT_TIER0_LR = "TIER0_LR"
    """


    """
    ATTACHMENT_POINT_TIER1_LR = "TIER1_LR"
    """


    """
    ATTACHMENT_POINT_SERVICE_PLANE = "SERVICE_PLANE"
    """


    """
    FUNCTIONALITIES_NG_FW = "NG_FW"
    """


    """
    FUNCTIONALITIES_IDS_IPS = "IDS_IPS"
    """


    """
    FUNCTIONALITIES_NET_MON = "NET_MON"
    """


    """
    FUNCTIONALITIES_HCX = "HCX"
    """


    """
    FUNCTIONALITIES_BYOD = "BYOD"
    """


    """
    FUNCTIONALITIES_EPP = "EPP"
    """


    """
    IMPLEMENTATIONS_NORTH_SOUTH = "NORTH_SOUTH"
    """


    """
    IMPLEMENTATIONS_EAST_WEST = "EAST_WEST"
    """


    """
    ON_FAILURE_POLICY_ALLOW = "ALLOW"
    """


    """
    ON_FAILURE_POLICY_BLOCK = "BLOCK"
    """


    """
    TRANSPORTS_L2_BRIDGE = "L2_BRIDGE"
    """


    """
    TRANSPORTS_L3_ROUTED = "L3_ROUTED"
    """


    """
    TRANSPORTS_NSH = "NSH"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'attachment_point': 'attachment_point',
                            'functionalities': 'functionalities',
                            'implementations': 'implementations',
                            'on_failure_policy': 'on_failure_policy',
                            'service_capability': 'service_capability',
                            'service_deployment_spec': 'service_deployment_spec',
                            'service_manager_id': 'service_manager_id',
                            'transports': 'transports',
                            'vendor_id': 'vendor_id',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 attachment_point=None,
                 functionalities=None,
                 implementations=None,
                 on_failure_policy=None,
                 service_capability=None,
                 service_deployment_spec=None,
                 service_manager_id=None,
                 transports=None,
                 vendor_id=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  attachment_point: :class:`list` of :class:`str` or ``None``
        :param attachment_point: Possible values are: 
            
            * :attr:`ServiceDefinition.ATTACHMENT_POINT_TIER0_LR`
            * :attr:`ServiceDefinition.ATTACHMENT_POINT_TIER1_LR`
            * :attr:`ServiceDefinition.ATTACHMENT_POINT_SERVICE_PLANE`
            
            The point at which the service is deployed/attached for redirecting
            the traffic to the the partner appliance. Attachment Point is
            required if Service caters to any functionality other than EPP.
        :type  functionalities: :class:`list` of :class:`str` or ``None``
        :param functionalities: Possible values are: 
            
            * :attr:`ServiceDefinition.FUNCTIONALITIES_NG_FW`
            * :attr:`ServiceDefinition.FUNCTIONALITIES_IDS_IPS`
            * :attr:`ServiceDefinition.FUNCTIONALITIES_NET_MON`
            * :attr:`ServiceDefinition.FUNCTIONALITIES_HCX`
            * :attr:`ServiceDefinition.FUNCTIONALITIES_BYOD`
            * :attr:`ServiceDefinition.FUNCTIONALITIES_EPP`
            
            The capabilities provided by the services. Needs to be one or more
            of the following | NG_FW - Next Generation Firewall | IDS_IPS -
            Intrusion detection System / Intrusion Prevention System | NET_MON
            - Network Monitoring | HCX - Hybrid Cloud Exchange | BYOD - Bring
            Your Own Device | EPP - Endpoint Protection.(Third party AntiVirus
            partners using NXGI should use this functionality for the service)
        :type  implementations: :class:`list` of :class:`str` or ``None``
        :param implementations: Possible values are: 
            
            * :attr:`ServiceDefinition.IMPLEMENTATIONS_NORTH_SOUTH`
            * :attr:`ServiceDefinition.IMPLEMENTATIONS_EAST_WEST`
            
            This indicates the insertion point of the service i.e whether the
            service will be used to protect North-South or East-West traffic in
            the datacenter.
        :type  on_failure_policy: :class:`str` or ``None``
        :param on_failure_policy: Possible values are: 
            
            * :attr:`ServiceDefinition.ON_FAILURE_POLICY_ALLOW`
            * :attr:`ServiceDefinition.ON_FAILURE_POLICY_BLOCK`
            
            Failure policy for the service tells datapath, the action to take
            i.e to Allow or Block traffic during failure scenarios. For
            north-south ServiceInsertion, failure policy in the service
            instance takes precedence. For east-west ServiceInsertion, failure
            policy in the service chain takes precedence. BLOCK is not
            supported for Endpoint protection (EPP) functionality.
        :type  service_capability: :class:`ServiceCapability` or ``None``
        :param service_capability: Service capability.
        :type  service_deployment_spec: :class:`ServiceDeploymentSpec` or ``None``
        :param service_deployment_spec: Service Deployment Specification defines takes in information
            required to deploy and configure a partner appliance/service-vm.
        :type  service_manager_id: :class:`str` or ``None``
        :param service_manager_id: ID of the service manager to which this service is attached with.
            This field is not set during creation of service. This field will
            be set explicitly when Service Manager is created successfully
            using this service.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  transports: :class:`list` of :class:`str` or ``None``
        :param transports: Possible values are: 
            
            * :attr:`ServiceDefinition.TRANSPORTS_L2_BRIDGE`
            * :attr:`ServiceDefinition.TRANSPORTS_L3_ROUTED`
            * :attr:`ServiceDefinition.TRANSPORTS_NSH`
            
            Transport Type of the service, which is the mechanism of
            redirecting the traffic to the the partner appliance. Transport
            type is required if Service caters to any functionality other than
            EPP.
        :type  vendor_id: :class:`str` or ``None``
        :param vendor_id: Id which is unique to a vendor or partner for which the service is
            created.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.attachment_point = attachment_point
        self.functionalities = functionalities
        self.implementations = implementations
        self.on_failure_policy = on_failure_policy
        self.service_capability = service_capability
        self.service_deployment_spec = service_deployment_spec
        self.service_manager_id = service_manager_id
        self.transports = transports
        self.vendor_id = vendor_id
        VapiStruct.__init__(self)


ServiceDefinition._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.service_definition', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'attachment_point': type.OptionalType(type.ListType(type.StringType())),
        'functionalities': type.OptionalType(type.ListType(type.StringType())),
        'implementations': type.OptionalType(type.ListType(type.StringType())),
        'on_failure_policy': type.OptionalType(type.StringType()),
        'service_capability': type.OptionalType(type.ReferenceType(__name__, 'ServiceCapability')),
        'service_deployment_spec': type.OptionalType(type.ReferenceType(__name__, 'ServiceDeploymentSpec')),
        'service_manager_id': type.OptionalType(type.StringType()),
        'transports': type.OptionalType(type.ListType(type.StringType())),
        'vendor_id': type.OptionalType(type.StringType()),
    },
    ServiceDefinition,
    False,
    None))



class ServiceDeploymentSpec(VapiStruct):
    """
    ServiceDeployment Spec consists of information required to deploy and
    configure the partner appliances. viz. Deployment template, deployment spec
    and NIC metatdata.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'deployment_specs': 'deployment_specs',
                            'deployment_template': 'deployment_template',
                            'nic_metadata_list': 'nic_metadata_list',
                            'svm_version': 'svm_version',
                            }

    def __init__(self,
                 deployment_specs=None,
                 deployment_template=None,
                 nic_metadata_list=None,
                 svm_version=None,
                ):
        """
        :type  deployment_specs: :class:`list` of :class:`SVMDeploymentSpec` or ``None``
        :param deployment_specs: Deployment Specs holds information required to deploy the
            Service-VMs. i.e. OVF url where the partner Service-VM OVF is
            hosted. The host type on which the OVF can be deployed, Form factor
            to name a few.
        :type  deployment_template: :class:`list` of :class:`DeploymentTemplate` or ``None``
        :param deployment_template: Deployment Template holds the attributes specific to partner for
            which the service is created. These attributes are opaque to NSX
            Manager.
        :type  nic_metadata_list: :class:`list` of :class:`NicMetadata` or ``None``
        :param nic_metadata_list: NIC metadata associated with the deployment spec.
        :type  svm_version: :class:`str` or ``None``
        :param svm_version: Partner needs to specify the Service VM version which will get
            deployed.
        """
        self.deployment_specs = deployment_specs
        self.deployment_template = deployment_template
        self.nic_metadata_list = nic_metadata_list
        self.svm_version = svm_version
        VapiStruct.__init__(self)


ServiceDeploymentSpec._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.service_deployment_spec', {
        'deployment_specs': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'SVMDeploymentSpec'))),
        'deployment_template': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'DeploymentTemplate'))),
        'nic_metadata_list': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'NicMetadata'))),
        'svm_version': type.OptionalType(type.StringType()),
    },
    ServiceDeploymentSpec,
    False,
    None))



class ServiceEntry(VapiStruct):
    """
    A Service entry that describes traffic

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ServiceEntry"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    RESOURCE_TYPE_IPPROTOCOLSERVICEENTRY = "IPProtocolServiceEntry"
    """


    """
    RESOURCE_TYPE_IGMPTYPESERVICEENTRY = "IGMPTypeServiceEntry"
    """


    """
    RESOURCE_TYPE_ICMPTYPESERVICEENTRY = "ICMPTypeServiceEntry"
    """


    """
    RESOURCE_TYPE_ALGTYPESERVICEENTRY = "ALGTypeServiceEntry"
    """


    """
    RESOURCE_TYPE_L4PORTSETSERVICEENTRY = "L4PortSetServiceEntry"
    """


    """
    RESOURCE_TYPE_ETHERTYPESERVICEENTRY = "EtherTypeServiceEntry"
    """


    """
    RESOURCE_TYPE_NESTEDSERVICESERVICEENTRY = "NestedServiceServiceEntry"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ServiceEntry',
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`ServiceEntry.RESOURCE_TYPE_IPPROTOCOLSERVICEENTRY`
            * :attr:`ServiceEntry.RESOURCE_TYPE_IGMPTYPESERVICEENTRY`
            * :attr:`ServiceEntry.RESOURCE_TYPE_ICMPTYPESERVICEENTRY`
            * :attr:`ServiceEntry.RESOURCE_TYPE_ALGTYPESERVICEENTRY`
            * :attr:`ServiceEntry.RESOURCE_TYPE_L4PORTSETSERVICEENTRY`
            * :attr:`ServiceEntry.RESOURCE_TYPE_ETHERTYPESERVICEENTRY`
            * :attr:`ServiceEntry.RESOURCE_TYPE_NESTEDSERVICESERVICEENTRY`
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ServiceEntry._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.service_entry', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
    },
    ServiceEntry,
    False,
    None))



class ServiceEntryListResult(VapiStruct):
    """
    Paged Collection of Service entries

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param results: Service entry list results
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ServiceEntry`. When methods return a value of this class as
            a return value, the attribute will contain all the attributes
            defined in :class:`ServiceEntry`.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


ServiceEntryListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.service_entry_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ServiceEntry')]))),
    },
    ServiceEntryListResult,
    False,
    None))



class ServiceInsertionServiceListResult(VapiStruct):
    """
    Service List

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`ServiceDefinition` or ``None``
        :param results: List of the Service-Insertion Services. The list has to be
            homogenous.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


ServiceInsertionServiceListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.service_insertion_service_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ServiceDefinition'))),
    },
    ServiceInsertionServiceListResult,
    False,
    None))



class ServiceInstanceEndpoint(VapiStruct):
    """
    A ServiceInstanceEndpoint belongs to one ByodPolicyServiceInstance and is
    attached to one ServiceInterface. A ServiceInstanceEndpoint represents a
    redirection target for a RedirectionPolicy.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ServiceInstanceEndpoint"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'service_interface_path': 'service_interface_path',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'target_ips': 'target_ips',
                            }

    def __init__(self,
                 service_interface_path=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ServiceInstanceEndpoint',
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 target_ips=None,
                ):
        """
        :type  service_interface_path: :class:`str` or ``None``
        :param service_interface_path: Path of Service Interface to which this ServiceInstanceEndpoint is
            connected.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`BaseEndpoint.RESOURCE_TYPE_VIRTUALENDPOINT`
            * :attr:`BaseEndpoint.RESOURCE_TYPE_SERVICEINSTANCEENDPOINT`
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  target_ips: :class:`list` of :class:`IPInfo` or ``None``
        :param target_ips: IPs where either inbound or outbound traffic is to be redirected.
        """
        self.service_interface_path = service_interface_path
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.target_ips = target_ips
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ServiceInstanceEndpoint._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.service_instance_endpoint', {
        'service_interface_path': type.OptionalType(type.StringType()),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'target_ips': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'IPInfo'))),
    },
    ServiceInstanceEndpoint,
    False,
    None))



class ServiceInstanceEndpointListResult(VapiStruct):
    """
    Paged Collection of ServiceInstanceEndpoint

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`ServiceInstanceEndpoint` or ``None``
        :param results: ServiceInstanceEndpoint list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


ServiceInstanceEndpointListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.service_instance_endpoint_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ServiceInstanceEndpoint'))),
    },
    ServiceInstanceEndpointListResult,
    False,
    None))



class ServiceInterface(VapiStruct):
    """
    Service interface configuration for internal connectivity.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'subnets': 'subnets',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 subnets=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  subnets: :class:`list` of :class:`InterfaceSubnet` or ``None``
        :param subnets: Specify IP address and network prefix for interface.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.subnets = subnets
        VapiStruct.__init__(self)


ServiceInterface._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.service_interface', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'subnets': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'InterfaceSubnet'))),
    },
    ServiceInterface,
    False,
    None))



class ServiceInterfaceListResult(VapiStruct):
    """
    Paged collection of Service Interfaces

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`ServiceInterface` or ``None``
        :param results: Service Interface list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


ServiceInterfaceListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.service_interface_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ServiceInterface'))),
    },
    ServiceInterfaceListResult,
    False,
    None))



class ServiceListResult(VapiStruct):
    """
    Paged Collection of Services

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`Service` or ``None``
        :param results: Service list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


ServiceListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.service_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Service'))),
    },
    ServiceListResult,
    False,
    None))



class ServiceProfileGroups(VapiStruct):
    """
    ServiceProfileGroups contains list of Groups referenced in Service
    Insertion Rules.To be considered, Service profile must be part of a Service
    chain and that Service chain must be used in a Rule.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'groups': 'groups',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 groups=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  groups: :class:`list` of :class:`GroupInfo` or ``None``
        :param groups: List of Groups Used in ServiceInsertion Rules.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.groups = groups
        VapiStruct.__init__(self)


ServiceProfileGroups._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.service_profile_groups', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'groups': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'GroupInfo'))),
    },
    ServiceProfileGroups,
    False,
    None))



class ServiceReference(VapiStruct):
    """
    An anchor object representing the intent to consume a given 3rd party
    service.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'enabled': 'enabled',
                            'partner_service_name': 'partner_service_name',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 enabled=None,
                 partner_service_name=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  enabled: :class:`bool` or ``None``
        :param enabled: A Service's operational state can be enabled or disabled. Note that
            would work only for NetX type of services and would not work for
            Guest Introsp- ection type of Services. TRUE - The Service should
            be enabled FALSE - The Service should be disabled
        :type  partner_service_name: :class:`str` or ``None``
        :param partner_service_name: Unique name of Partner Service to be consumed for redirection.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.enabled = enabled
        self.partner_service_name = partner_service_name
        VapiStruct.__init__(self)


ServiceReference._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.service_reference', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'enabled': type.OptionalType(type.BooleanType()),
        'partner_service_name': type.OptionalType(type.StringType()),
    },
    ServiceReference,
    False,
    None))



class ServiceReferenceListResult(VapiStruct):
    """
    Service Reference List

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`ServiceReference` or ``None``
        :param results: Service Reference list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


ServiceReferenceListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.service_reference_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ServiceReference'))),
    },
    ServiceReferenceListResult,
    False,
    None))



class ServiceSegment(VapiStruct):
    """
    Service Segment configuration to attach Service Insertion VM.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'lr_paths': 'lr_paths',
                            'transport_zone_path': 'transport_zone_path',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 lr_paths=None,
                 transport_zone_path=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  lr_paths: :class:`list` of :class:`str` or ``None``
        :param lr_paths: Policy paths of logical routers or ports | to which this Service
            Segment can be connected.
        :type  transport_zone_path: :class:`str` or ``None``
        :param transport_zone_path: Policy path to transport zone. Only overlay transport zone is
            supported.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.lr_paths = lr_paths
        self.transport_zone_path = transport_zone_path
        VapiStruct.__init__(self)


ServiceSegment._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.service_segment', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'lr_paths': type.OptionalType(type.ListType(type.StringType())),
        'transport_zone_path': type.OptionalType(type.StringType()),
    },
    ServiceSegment,
    False,
    None))



class ServiceSegmentListResult(VapiStruct):
    """
    Paged collection of Service Segment

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`ServiceSegment` or ``None``
        :param results: Service Segment list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


ServiceSegmentListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.service_segment_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ServiceSegment'))),
    },
    ServiceSegmentListResult,
    False,
    None))



class SessionTimerProfileBindingListResult(VapiStruct):
    """
    Paged Collection of session timer profile binding maps

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`SessionTimerProfileBindingMap` or ``None``
        :param results: Session timer profile binding maps list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


SessionTimerProfileBindingListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.session_timer_profile_binding_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'SessionTimerProfileBindingMap'))),
    },
    SessionTimerProfileBindingListResult,
    False,
    None))



class SessionTimerProfileBindingMap(VapiStruct):
    """
    This entity will be used to establish association between Session Timer
    profile and Logical Routers.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'profile_path': 'profile_path',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 profile_path=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  profile_path: :class:`str` or ``None``
        :param profile_path: PolicyPath of associated Profile
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.profile_path = profile_path
        VapiStruct.__init__(self)


SessionTimerProfileBindingMap._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.session_timer_profile_binding_map', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'profile_path': type.OptionalType(type.StringType()),
    },
    SessionTimerProfileBindingMap,
    False,
    None))



class SetFields(VapiStruct):
    """
    Set Fields is an action to set fields of the source event.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "SetFields"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'field_settings': 'field_settings',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 field_settings=None,
                 resource_type='SetFields',
                ):
        """
        :type  field_settings: :class:`list` of :class:`FieldSetting` or ``None``
        :param field_settings: Field Settings.
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`Action.RESOURCE_TYPE_PATCHRESOURCES`
            * :attr:`Action.RESOURCE_TYPE_SETFIELDS`
            
             Reaction Action resource type.
        """
        self.field_settings = field_settings
        self._resource_type = resource_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

SetFields._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.set_fields', {
        'field_settings': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'FieldSetting'))),
        'resource_type': type.StringType(),
    },
    SetFields,
    False,
    None))



class Site(VapiStruct):
    """
    Site represents an NSX deployment having its own set of NSX clusters and
    transport nodes. It may correspond to a Data Center, VMC deployment, or
    NSX-Cloud deployment managed via CSM.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'fail_if_rtep_misconfigured': 'fail_if_rtep_misconfigured',
                            'fail_if_rtt_exceeded': 'fail_if_rtt_exceeded',
                            'federation_config': 'federation_config',
                            'maximum_rtt': 'maximum_rtt',
                            'site_connection_info': 'site_connection_info',
                            'site_number': 'site_number',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 fail_if_rtep_misconfigured=None,
                 fail_if_rtt_exceeded=None,
                 federation_config=None,
                 maximum_rtt=None,
                 site_connection_info=None,
                 site_number=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  fail_if_rtep_misconfigured: :class:`bool` or ``None``
        :param fail_if_rtep_misconfigured: Both the local site and the remote site must have edge clusters
            correctly configured and remote tunnel endpoint (RTEP) interfaces
            must be defined, or onboarding will fail.
        :type  fail_if_rtt_exceeded: :class:`bool` or ``None``
        :param fail_if_rtt_exceeded: Fail onboarding if maximum RTT exceeded.
        :type  federation_config: :class:`GmFederationSiteConfig` or ``None``
        :param federation_config: System managed federation config.
        :type  maximum_rtt: :class:`long` or ``None``
        :param maximum_rtt: If provided and fail_if_rtt_exceeded is true, onboarding of the
            site will fail if measured RTT is greater than this value. format:
            int64
        :type  site_connection_info: :class:`list` of :class:`SiteNodeConnectionInfo` or ``None``
        :param site_connection_info: To onboard a site, the connection information (username, password,
            and API thumbprint) for at least one NSX manager node in the remote
            site must be provided. Once the site has been successfully
            onboarded, the site_connection_info is discarded and authentication
            to the remote site occurs using an X.509 client certificate.
        :type  site_number: :class:`long` or ``None``
        :param site_number: 12-bit system generated site number format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.fail_if_rtep_misconfigured = fail_if_rtep_misconfigured
        self.fail_if_rtt_exceeded = fail_if_rtt_exceeded
        self.federation_config = federation_config
        self.maximum_rtt = maximum_rtt
        self.site_connection_info = site_connection_info
        self.site_number = site_number
        VapiStruct.__init__(self)


Site._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.site', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'fail_if_rtep_misconfigured': type.OptionalType(type.BooleanType()),
        'fail_if_rtt_exceeded': type.OptionalType(type.BooleanType()),
        'federation_config': type.OptionalType(type.ReferenceType(__name__, 'GmFederationSiteConfig')),
        'maximum_rtt': type.OptionalType(type.IntegerType()),
        'site_connection_info': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'SiteNodeConnectionInfo'))),
        'site_number': type.OptionalType(type.IntegerType()),
    },
    Site,
    False,
    None))



class SiteAllocationIndexForEdge(VapiStruct):
    """
    Index for cross site allocation for edge cluster and its members referred
    by gateway.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'index': 'index',
                            'target_resource_path': 'target_resource_path',
                            }

    def __init__(self,
                 index=None,
                 target_resource_path=None,
                ):
        """
        :type  index: :class:`long` or ``None``
        :param index: Unqiue edge cluster node index across sites based on stretch of the
            Gateway. For example, if a Gateway is streched to sites S1 with one
            edge cluster of 3 nodes and site S2 with one edge cluster of 2
            nodes, the in the Global Manager will allocate the index for 5 edge
            nodes and 2 cluster in the rage 0 to 7. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  target_resource_path: :class:`str` or ``None``
        :param target_resource_path: Edge cluster or edge node path
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.index = index
        self.target_resource_path = target_resource_path
        VapiStruct.__init__(self)


SiteAllocationIndexForEdge._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.site_allocation_index_for_edge', {
        'index': type.OptionalType(type.IntegerType()),
        'target_resource_path': type.OptionalType(type.StringType()),
    },
    SiteAllocationIndexForEdge,
    False,
    None))



class SiteFederationConfig(VapiStruct):
    """
    Site fedeation configuration.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'rtep_ips': 'rtep_ips',
                            'site_id': 'site_id',
                            'site_index': 'site_index',
                            'site_path': 'site_path',
                            }

    def __init__(self,
                 rtep_ips=None,
                 site_id=None,
                 site_index=None,
                 site_path=None,
                ):
        """
        :type  rtep_ips: :class:`list` of :class:`str` or ``None``
        :param rtep_ips: Remote tunnel endpoint IP addresses format: ip
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  site_id: :class:`str` or ``None``
        :param site_id: Site UUID
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  site_index: :class:`long` or ``None``
        :param site_index: Unique site index allocated (from range 0-4095) format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  site_path: :class:`str` or ``None``
        :param site_path: Site path
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.rtep_ips = rtep_ips
        self.site_id = site_id
        self.site_index = site_index
        self.site_path = site_path
        VapiStruct.__init__(self)


SiteFederationConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.site_federation_config', {
        'rtep_ips': type.OptionalType(type.ListType(type.StringType())),
        'site_id': type.OptionalType(type.StringType()),
        'site_index': type.OptionalType(type.IntegerType()),
        'site_path': type.OptionalType(type.StringType()),
    },
    SiteFederationConfig,
    False,
    None))



class SiteInfo(VapiStruct):
    """
    Information related to Sites applicable for given VHC.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'edge_cluster_paths': 'edge_cluster_paths',
                            'site_path': 'site_path',
                            'transport_zone_paths': 'transport_zone_paths',
                            }

    def __init__(self,
                 edge_cluster_paths=None,
                 site_path=None,
                 transport_zone_paths=None,
                ):
        """
        :type  edge_cluster_paths: :class:`list` of :class:`str` or ``None``
        :param edge_cluster_paths: The edge cluster on which the networking elements for the VHC will
            be created.
        :type  site_path: :class:`str` or ``None``
        :param site_path: For the local manager this needs to be set to 'default'. This
            represents the path of the site which is managed by Global Manager.
        :type  transport_zone_paths: :class:`list` of :class:`str` or ``None``
        :param transport_zone_paths: The transport zone has to be set when creating VHC on Local
            manager. If not set for local manager, default transport zone will
            be used. For the Global Manager the transport zone path will be
            picked up from the site.
        """
        self.edge_cluster_paths = edge_cluster_paths
        self.site_path = site_path
        self.transport_zone_paths = transport_zone_paths
        VapiStruct.__init__(self)


SiteInfo._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.site_info', {
        'edge_cluster_paths': type.OptionalType(type.ListType(type.StringType())),
        'site_path': type.OptionalType(type.StringType()),
        'transport_zone_paths': type.OptionalType(type.ListType(type.StringType())),
    },
    SiteInfo,
    False,
    None))



class SiteListResult(VapiStruct):
    """
    Paged Collection of Sites.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`Site` or ``None``
        :param results: Site list result.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


SiteListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.site_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Site'))),
    },
    SiteListResult,
    False,
    None))



class SiteNodeConnectionInfo(VapiStruct):
    """
    Credential info to connect to a node in the federated remote site.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'fqdn': 'fqdn',
                            'password': 'password',
                            'thumbprint': 'thumbprint',
                            'username': 'username',
                            }

    def __init__(self,
                 fqdn=None,
                 password=None,
                 thumbprint=None,
                 username=None,
                ):
        """
        :type  fqdn: :class:`str` or ``None``
        :param fqdn: Please specify the fqdn of the Management Node of your site.
        :type  password: :class:`str` or ``None``
        :param password: Password to connect to Site's Local Manager.
        :type  thumbprint: :class:`str` or ``None``
        :param thumbprint: Thumbprint of Site's Local Manager in the form of a SHA-256 hash
            represented in lower case HEX.
        :type  username: :class:`str` or ``None``
        :param username: Username to connect to Site's Local Manager.
        """
        self.fqdn = fqdn
        self.password = password
        self.thumbprint = thumbprint
        self.username = username
        VapiStruct.__init__(self)


SiteNodeConnectionInfo._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.site_node_connection_info', {
        'fqdn': type.OptionalType(type.StringType()),
        'password': type.OptionalType(type.StringType()),
        'thumbprint': type.OptionalType(type.StringType()),
        'username': type.OptionalType(type.StringType()),
    },
    SiteNodeConnectionInfo,
    False,
    None))



class SiteOffBoardingState(VapiStruct):
    """
    Represents site offboarding status.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    STATUS_INITIALIZE_INPROGRESS = "INITIALIZE_INPROGRESS"
    """


    """
    STATUS_INITIALIZE_FAILED = "INITIALIZE_FAILED"
    """


    """
    STATUS_INITIALIZE_SUCCESSFUL = "INITIALIZE_SUCCESSFUL"
    """


    """
    STATUS_CLEANUP_INPROGRESS = "CLEANUP_INPROGRESS"
    """


    """
    STATUS_CLEANUP_FAILED = "CLEANUP_FAILED"
    """


    """
    STATUS_CLEANUP_SUCCESSFUL = "CLEANUP_SUCCESSFUL"
    """


    """
    STATUS_REALIZATION_INPROGRESS = "REALIZATION_INPROGRESS"
    """


    """
    STATUS_REALIZATION_FAILED = "REALIZATION_FAILED"
    """


    """
    STATUS_REALIZATION_SUCCESSFUL = "REALIZATION_SUCCESSFUL"
    """


    """
    STATUS_TERMINAL_INPROGRESS = "TERMINAL_INPROGRESS"
    """


    """
    STATUS_TERMINAL_FAILED = "TERMINAL_FAILED"
    """


    """
    STATUS_FAILED = "FAILED"
    """


    """
    STATUS_SUCCESSFUL = "SUCCESSFUL"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'message': 'message',
                            'status': 'status',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 message=None,
                 status=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  message: :class:`str` or ``None``
        :param message: Captures message associated with status. If FAILED, can contain
            folowing errors local site configuration is null internal server
            error with detail
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  status: :class:`str` or ``None``
        :param status: Possible values are: 
            
            * :attr:`SiteOffBoardingState.STATUS_INITIALIZE_INPROGRESS`
            * :attr:`SiteOffBoardingState.STATUS_INITIALIZE_FAILED`
            * :attr:`SiteOffBoardingState.STATUS_INITIALIZE_SUCCESSFUL`
            * :attr:`SiteOffBoardingState.STATUS_CLEANUP_INPROGRESS`
            * :attr:`SiteOffBoardingState.STATUS_CLEANUP_FAILED`
            * :attr:`SiteOffBoardingState.STATUS_CLEANUP_SUCCESSFUL`
            * :attr:`SiteOffBoardingState.STATUS_REALIZATION_INPROGRESS`
            * :attr:`SiteOffBoardingState.STATUS_REALIZATION_FAILED`
            * :attr:`SiteOffBoardingState.STATUS_REALIZATION_SUCCESSFUL`
            * :attr:`SiteOffBoardingState.STATUS_TERMINAL_INPROGRESS`
            * :attr:`SiteOffBoardingState.STATUS_TERMINAL_FAILED`
            * :attr:`SiteOffBoardingState.STATUS_FAILED`
            * :attr:`SiteOffBoardingState.STATUS_SUCCESSFUL`
            
             Represents site offboarding status.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.message = message
        self.status = status
        VapiStruct.__init__(self)


SiteOffBoardingState._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.site_off_boarding_state', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'message': type.OptionalType(type.StringType()),
        'status': type.OptionalType(type.StringType()),
    },
    SiteOffBoardingState,
    False,
    None))



class Source(VapiStruct):
    """
    Source that is logically deemed to be the \"object\" upon which the Event
    in question initially occurred upon. The Source is responsible for
    providing information of the occurred event. Some example sources include:
    - Resource. - API.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "Source"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    RESOURCE_TYPE_RESOURCEOPERATION = "ResourceOperation"
    """


    """
    RESOURCE_TYPE_APIREQUESTBODY = "ApiRequestBody"
    """


    """



    _canonical_to_pep_names = {
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 resource_type='Source',
                ):
        """
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`Source.RESOURCE_TYPE_RESOURCEOPERATION`
            * :attr:`Source.RESOURCE_TYPE_APIREQUESTBODY`
            
             Event Source resource type.
        """
        self._resource_type = resource_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

Source._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.source', {
        'resource_type': type.StringType(),
    },
    Source,
    False,
    None))



class SourceFieldEvaluation(VapiStruct):
    """
    Source Field Evaluation represents an evaluation on resource fields. A
    source field evaluation will be evaluated against an Event Source which is
    of type Resource Operation. For instance, the attribute constraint could be
    related to the necessity that one of the source fields equals one of the
    specified values.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "SourceFieldEvaluation"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    OPERATOR_EQ = "EQ"
    """


    """
    OPERATOR_NOT_EQ = "NOT_EQ"
    """


    """



    _canonical_to_pep_names = {
                            'expected': 'expected',
                            'field_pointer': 'field_pointer',
                            'operator': 'operator',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 expected=None,
                 field_pointer=None,
                 operator=None,
                 resource_type='SourceFieldEvaluation',
                ):
        """
        :type  expected: :class:`list` of :class:`str` or ``None``
        :param expected: Expected values necessary to apply the specified operation on the
            source field value.
        :type  field_pointer: :class:`str` or ``None``
        :param field_pointer: Field in the form of a pointer, describing the location of the
            attribute within the source of the event.
        :type  operator: :class:`str` or ``None``
        :param operator: Possible values are: 
            
            * :attr:`SourceFieldEvaluation.OPERATOR_EQ`
            * :attr:`SourceFieldEvaluation.OPERATOR_NOT_EQ`
            
             Logical operator.
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`Evaluation.RESOURCE_TYPE_SOURCEFIELDEVALUATION`
            
             Criterion Evaluation resource type.
        """
        self.expected = expected
        self.field_pointer = field_pointer
        self.operator = operator
        self._resource_type = resource_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

SourceFieldEvaluation._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.source_field_evaluation', {
        'expected': type.OptionalType(type.ListType(type.StringType())),
        'field_pointer': type.OptionalType(type.StringType()),
        'operator': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
    },
    SourceFieldEvaluation,
    False,
    None))



class Span(VapiStruct):
    """
    Represents the strech information for a federated entity available only on
    local manager.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'sites': 'sites',
                            'span_leader': 'span_leader',
                            'span_resource': 'span_resource',
                            'span_resource_type': 'span_resource_type',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 sites=None,
                 span_leader=None,
                 span_resource=None,
                 span_resource_type=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sites: :class:`list` of :class:`SpanSiteInfo` or ``None``
        :param sites: List of SpanSiteInfos representing the strech of the entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  span_leader: :class:`str` or ``None``
        :param span_leader: Represents Policy resource type streached entity's span leader.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  span_resource: :class:`str` or ``None``
        :param span_resource: Represents Policy resource path of streached entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  span_resource_type: :class:`str` or ``None``
        :param span_resource_type: Policy resource type of the streached entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.sites = sites
        self.span_leader = span_leader
        self.span_resource = span_resource
        self.span_resource_type = span_resource_type
        VapiStruct.__init__(self)


Span._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.span', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'sites': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'SpanSiteInfo'))),
        'span_leader': type.OptionalType(type.StringType()),
        'span_resource': type.OptionalType(type.StringType()),
        'span_resource_type': type.OptionalType(type.StringType()),
    },
    Span,
    False,
    None))



class SpanSiteInfo(VapiStruct):
    """
    Represents the Site resource information for a Span entity including both
    the internal id as well as the site path.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'site_id': 'site_id',
                            'site_path': 'site_path',
                            }

    def __init__(self,
                 site_id=None,
                 site_path=None,
                ):
        """
        :type  site_id: :class:`str` or ``None``
        :param site_id: Site UUID representing the Site resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  site_path: :class:`str` or ``None``
        :param site_path: Path of the Site resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.site_id = site_id
        self.site_path = site_path
        VapiStruct.__init__(self)


SpanSiteInfo._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.span_site_info', {
        'site_id': type.OptionalType(type.StringType()),
        'site_path': type.OptionalType(type.StringType()),
    },
    SpanSiteInfo,
    False,
    None))



class SpoofGuardProfile(VapiStruct):
    """
    SpoofGuard is a tool that is designed to prevent virtual machines in your
    environment from sending traffic with IP addresses which are not authorized
    to send traffic from. A SpoofGuard policy profile once enabled blocks the
    traffic determined to be spoofed.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'address_binding_whitelist': 'address_binding_whitelist',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 address_binding_whitelist=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  address_binding_whitelist: :class:`bool` or ``None``
        :param address_binding_whitelist: If true, enable the SpoofGuard, which only allows VM sending
            traffic with the IPs in the whitelist.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.address_binding_whitelist = address_binding_whitelist
        VapiStruct.__init__(self)


SpoofGuardProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.spoof_guard_profile', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'address_binding_whitelist': type.OptionalType(type.BooleanType()),
    },
    SpoofGuardProfile,
    False,
    None))



class SpoofGuardProfileListResult(VapiStruct):
    """
    Paged collection of SpoofGuard profiles

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`SpoofGuardProfile` or ``None``
        :param results: SpoofGuard profile list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


SpoofGuardProfileListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.spoof_guard_profile_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'SpoofGuardProfile'))),
    },
    SpoofGuardProfileListResult,
    False,
    None))



class SslTrustObjectData(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'key_algo': 'key_algo',
                            'passphrase': 'passphrase',
                            'pem_encoded': 'pem_encoded',
                            'private_key': 'private_key',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 key_algo=None,
                 passphrase=None,
                 pem_encoded=None,
                 private_key=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  key_algo: :class:`str` or ``None``
        :param key_algo: Key algorithm contained in this certificate
        :type  passphrase: :class:`str` or ``None``
        :param passphrase: Password for private key encryption
        :type  pem_encoded: :class:`str` or ``None``
        :param pem_encoded: pem encoded certificate data
        :type  private_key: :class:`str` or ``None``
        :param private_key: private key data
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.key_algo = key_algo
        self.passphrase = passphrase
        self.pem_encoded = pem_encoded
        self.private_key = private_key
        VapiStruct.__init__(self)


SslTrustObjectData._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.ssl_trust_object_data', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'key_algo': type.OptionalType(type.StringType()),
        'passphrase': type.OptionalType(type.StringType()),
        'pem_encoded': type.OptionalType(type.StringType()),
        'private_key': type.OptionalType(type.StringType()),
    },
    SslTrustObjectData,
    False,
    None))



class StandaloneHostIdfwConfiguration(VapiStruct):
    """
    Idfw configuration for enable/disable idfw on standalone hosts.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'idfw_enabled': 'idfw_enabled',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 idfw_enabled=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  idfw_enabled: :class:`bool` or ``None``
        :param idfw_enabled: If set to true, Idfw is enabled for standalone hosts
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.idfw_enabled = idfw_enabled
        VapiStruct.__init__(self)


StandaloneHostIdfwConfiguration._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.standalone_host_idfw_configuration', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'idfw_enabled': type.OptionalType(type.BooleanType()),
    },
    StandaloneHostIdfwConfiguration,
    False,
    None))



class StatItem(VapiStruct):
    """
    Displayed as a single number. It can be used to show the characteristics of
    entities such as Logical Switches, Firewall Rules, and so on. For example,
    number of logical switches and their admin states.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'drilldown_id': 'drilldown_id',
                            'tooltip': 'tooltip',
                            'total': 'total',
                            'value': 'value',
                            }

    def __init__(self,
                 drilldown_id=None,
                 tooltip=None,
                 total=None,
                 value=None,
                ):
        """
        :type  drilldown_id: :class:`str` or ``None``
        :param drilldown_id: Id of drilldown widget, if any. Id should be a valid id of an
            existing widget.
        :type  tooltip: :class:`list` of :class:`Tooltip` or ``None``
        :param tooltip: Multi-line text to be shown on tooltip while hovering over the
            stat.
        :type  total: :class:`str` or ``None``
        :param total: If expression for total is specified, it evaluates it. Total can be
            omitted if not needed to be shown.
        :type  value: :class:`str` or ``None``
        :param value: Expression for stat to be displayed.
        """
        self.drilldown_id = drilldown_id
        self.tooltip = tooltip
        self.total = total
        self.value = value
        VapiStruct.__init__(self)


StatItem._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.stat_item', {
        'drilldown_id': type.OptionalType(type.StringType()),
        'tooltip': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tooltip'))),
        'total': type.OptionalType(type.StringType()),
        'value': type.OptionalType(type.StringType()),
    },
    StatItem,
    False,
    None))



class StaticARPConfig(VapiStruct):
    """
    Contains Static ARP configuration for Segment.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'ip_address': 'ip_address',
                            'mac_address': 'mac_address',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 ip_address=None,
                 mac_address=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  ip_address: :class:`str` or ``None``
        :param ip_address: IP Address format: ip
        :type  mac_address: :class:`str` or ``None``
        :param mac_address: MAC Address format: mac-address
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.ip_address = ip_address
        self.mac_address = mac_address
        VapiStruct.__init__(self)


StaticARPConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.static_ARP_config', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'ip_address': type.OptionalType(type.StringType()),
        'mac_address': type.OptionalType(type.StringType()),
    },
    StaticARPConfig,
    False,
    None))



class StaticFilter(VapiStruct):
    """
    Static filters

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'display_name': 'display_name',
                            'value': 'value',
                            }

    def __init__(self,
                 display_name=None,
                 value=None,
                ):
        """
        :type  display_name: :class:`str` or ``None``
        :param display_name: display name to be shown in the drop down for static filter.
        :type  value: :class:`str` or ``None``
        :param value: Value of static filter inside dropdown filter.
        """
        self.display_name = display_name
        self.value = value
        VapiStruct.__init__(self)


StaticFilter._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.static_filter', {
        'display_name': type.OptionalType(type.StringType()),
        'value': type.OptionalType(type.StringType()),
    },
    StaticFilter,
    False,
    None))



class StaticRouteBfdPeer(VapiStruct):
    """
    Static Route Bidirectional Forwarding Detection Peer

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'bfd_profile_path': 'bfd_profile_path',
                            'enabled': 'enabled',
                            'peer_address': 'peer_address',
                            'scope': 'scope',
                            'source_addresses': 'source_addresses',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 bfd_profile_path=None,
                 enabled=None,
                 peer_address=None,
                 scope=None,
                 source_addresses=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  bfd_profile_path: :class:`str` or ``None``
        :param bfd_profile_path: Bfd Profile is not supported for IPv6 networks.
        :type  enabled: :class:`bool` or ``None``
        :param enabled: Flag to enable BFD peer.
        :type  peer_address: :class:`str` or ``None``
        :param peer_address: Only IPv4 addresses are supported. Only a single BFD config per
            peer address is allowed.
        :type  scope: :class:`list` of :class:`str` or ``None``
        :param scope: Represents the array of policy paths of locale services where this
            BFD peer should get relalized on. The locale service service and
            this BFD peer must belong to the same router. Default scope is
            empty.
        :type  source_addresses: :class:`list` of :class:`str` or ``None``
        :param source_addresses: Array of Tier0 external interface IP addresses. BFD peering is
            established from all these source addresses to the neighbor
            specified in peer_address. Only IPv4 addresses are supported.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.bfd_profile_path = bfd_profile_path
        self.enabled = enabled
        self.peer_address = peer_address
        self.scope = scope
        self.source_addresses = source_addresses
        VapiStruct.__init__(self)


StaticRouteBfdPeer._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.static_route_bfd_peer', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'bfd_profile_path': type.OptionalType(type.StringType()),
        'enabled': type.OptionalType(type.BooleanType()),
        'peer_address': type.OptionalType(type.StringType()),
        'scope': type.OptionalType(type.ListType(type.StringType())),
        'source_addresses': type.OptionalType(type.ListType(type.StringType())),
    },
    StaticRouteBfdPeer,
    False,
    None))



class StaticRouteBfdPeerListResult(VapiStruct):
    """
    Paged collection of StaticRouteBfdPeer.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`StaticRouteBfdPeer` or ``None``
        :param results: StaticRouteBfdPeer list results.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


StaticRouteBfdPeerListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.static_route_bfd_peer_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'StaticRouteBfdPeer'))),
    },
    StaticRouteBfdPeerListResult,
    False,
    None))



class StaticRoutes(VapiStruct):
    """
    Static routes configuration on Tier-0 or Tier-1.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'enabled_on_secondary': 'enabled_on_secondary',
                            'network': 'network',
                            'next_hops': 'next_hops',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 enabled_on_secondary=None,
                 network=None,
                 next_hops=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  enabled_on_secondary: :class:`bool` or ``None``
        :param enabled_on_secondary: When false or by default northbound routes are configured only on
            the primary location and not on secondary location. When true, the
            static route will also be configured on a secondary location.
            Secondary location prefers route learned from the primary location
            and enabling this flag secondary location can override this. This
            flag is not applicable if all sites are primary.
        :type  network: :class:`str` or ``None``
        :param network: Specify network address in CIDR format. format:
            address-or-block-or-range
        :type  next_hops: :class:`list` of :class:`RouterNexthop` or ``None``
        :param next_hops: Specify next hop routes for network.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.enabled_on_secondary = enabled_on_secondary
        self.network = network
        self.next_hops = next_hops
        VapiStruct.__init__(self)


StaticRoutes._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.static_routes', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'enabled_on_secondary': type.OptionalType(type.BooleanType()),
        'network': type.OptionalType(type.StringType()),
        'next_hops': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'RouterNexthop'))),
    },
    StaticRoutes,
    False,
    None))



class StaticRoutesListResult(VapiStruct):
    """
    Paged collection of Static Routes

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`StaticRoutes` or ``None``
        :param results: Static Routes list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


StaticRoutesListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.static_routes_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'StaticRoutes'))),
    },
    StaticRoutesListResult,
    False,
    None))



class StatsConfiguration(VapiStruct):
    """
    Represents configuration of a statistic for an entity. Example, number of
    logical switches and their admin states.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "StatsConfiguration"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    SUB_TYPE_COMPACT = "COMPACT"
    """


    """



    _canonical_to_pep_names = {
                            'label': 'label',
                            'navigation': 'navigation',
                            'sections': 'sections',
                            'stat': 'stat',
                            'sub_type': 'sub_type',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'datasources': 'datasources',
                            'default_filter_value': 'default_filter_value',
                            'drilldown_id': 'drilldown_id',
                            'filter': 'filter',
                            'filter_value_required': 'filter_value_required',
                            'footer': 'footer',
                            'icons': 'icons',
                            'is_drilldown': 'is_drilldown',
                            'legend': 'legend',
                            'shared': 'shared',
                            'span': 'span',
                            'weight': 'weight',
                            }

    def __init__(self,
                 label=None,
                 navigation=None,
                 sections=None,
                 stat=None,
                 sub_type=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='StatsConfiguration',
                 tags=None,
                 datasources=None,
                 default_filter_value=None,
                 drilldown_id=None,
                 filter=None,
                 filter_value_required=None,
                 footer=None,
                 icons=None,
                 is_drilldown=None,
                 legend=None,
                 shared=None,
                 span=None,
                 weight=None,
                ):
        """
        :type  label: :class:`Label` or ``None``
        :param label: Displayed at the sections, by default. It labels the entities of
            sections. If label is not provided, the sections are not labelled.
        :type  navigation: :class:`str` or ``None``
        :param navigation: Hyperlink of the specified UI page that provides details.
        :type  sections: :class:`list` of :class:`DonutSection` or ``None``
        :param sections: Sections
        :type  stat: :class:`StatItem` or ``None``
        :param stat: Expression that fetches statistic. It can be used to show the
            characteristics of entities such as Logical Switches, Firewall
            Rules, and so on. For example, number of logical switches and their
            admin states. If stat is not provided, then it will not be
            displayed.
        :type  sub_type: :class:`str` or ``None``
        :param sub_type: Possible values are: 
            
            * :attr:`StatsConfiguration.SUB_TYPE_COMPACT`
            
            A sub-type of StatsConfiguration. If sub-type is not specified the
            parent type is rendered. The COMPACT sub_type, conserves the space
            for the widget. The statistic is placed on the right side on top of
            the status bar and the title of the widget is placed on the left
            side on the top of the status bar. The COMPACT style aligns itself
            horizontally as per the width of the container. If multiple widgets
            are placed insided the container then the widgets are placed one
            below the other to conserve the space.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Title of the widget. If display_name is omitted, the widget will be
            shown without a title.
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`WidgetConfiguration.RESOURCE_TYPE_LABELVALUECONFIGURATION`
            * :attr:`WidgetConfiguration.RESOURCE_TYPE_DONUTCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_MULTIWIDGETCONFIGURATION`
            * :attr:`WidgetConfiguration.RESOURCE_TYPE_CONTAINERCONFIGURATION`
            * :attr:`WidgetConfiguration.RESOURCE_TYPE_STATSCONFIGURATION`
            * :attr:`WidgetConfiguration.RESOURCE_TYPE_GRIDCONFIGURATION`
            * :attr:`WidgetConfiguration.RESOURCE_TYPE_GRAPHCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_CUSTOMWIDGETCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_DROPDOWNFILTERWIDGETCONFIGURATION`
            
            Supported visualization types are LabelValueConfiguration,
            DonutConfiguration, GridConfiguration, StatsConfiguration,
            MultiWidgetConfiguration, GraphConfiguration,
            ContainerConfiguration, CustomWidgetConfiguration and
            DropdownFilterWidgetConfiguration.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  datasources: :class:`list` of :class:`Datasource` or ``None``
        :param datasources: The 'datasources' represent the sources from which data will be
            fetched. Currently, only NSX-API is supported as a 'default'
            datasource. An example of specifying 'default' datasource along
            with the urls to fetch data from is given at 'example_request'
            section of 'CreateWidgetConfiguration' API.
        :type  default_filter_value: :class:`list` of :class:`DefaultFilterValue` or ``None``
        :param default_filter_value: Default filter values to be passed to datasources. This will be
            used when the report is requested without filter values.
        :type  drilldown_id: :class:`str` or ``None``
        :param drilldown_id: Id of drilldown widget, if any. Id should be a valid id of an
            existing widget. A widget is considered as drilldown widget when it
            is associated with any other widget and provides more detailed
            information about any data item from the parent widget.
        :type  filter: :class:`str` or ``None``
        :param filter: Id of filter widget for subscription, if any. Id should be a valid
            id of an existing filter widget. Filter widget should be from the
            same view. Datasource URLs should have placeholder values equal to
            filter alias to accept the filter value on filter change.
        :type  filter_value_required: :class:`bool` or ``None``
        :param filter_value_required: Flag to indicate that widget will continue to work without filter
            value. If this flag is set to false then default_filter_value is
            manadatory.
        :type  footer: :class:`Footer` or ``None``
        :param footer: 
        :type  icons: :class:`list` of :class:`Icon` or ``None``
        :param icons: Icons to be applied at dashboard for widgets and UI elements.
        :type  is_drilldown: :class:`bool` or ``None``
        :param is_drilldown: Set to true if this widget should be used as a drilldown.
        :type  legend: :class:`Legend` or ``None``
        :param legend: Legend to be displayed. If legend is not needed, do not include it.
        :type  shared: :class:`bool` or ``None``
        :param shared: Please use the property 'shared' of View instead of this. The
            widgets of a shared view are visible to other users.
        :type  span: :class:`long` or ``None``
        :param span: Represents the horizontal span of the widget / container. format:
            int32
        :type  weight: :class:`long` or ``None``
        :param weight: Specify relavite weight in WidgetItem for placement in a view.
            Please see WidgetItem for details. format: int32
        """
        self.label = label
        self.navigation = navigation
        self.sections = sections
        self.stat = stat
        self.sub_type = sub_type
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.datasources = datasources
        self.default_filter_value = default_filter_value
        self.drilldown_id = drilldown_id
        self.filter = filter
        self.filter_value_required = filter_value_required
        self.footer = footer
        self.icons = icons
        self.is_drilldown = is_drilldown
        self.legend = legend
        self.shared = shared
        self.span = span
        self.weight = weight
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

StatsConfiguration._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.stats_configuration', {
        'label': type.OptionalType(type.ReferenceType(__name__, 'Label')),
        'navigation': type.OptionalType(type.StringType()),
        'sections': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'DonutSection'))),
        'stat': type.OptionalType(type.ReferenceType(__name__, 'StatItem')),
        'sub_type': type.OptionalType(type.StringType()),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'datasources': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Datasource'))),
        'default_filter_value': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'DefaultFilterValue'))),
        'drilldown_id': type.OptionalType(type.StringType()),
        'filter': type.OptionalType(type.StringType()),
        'filter_value_required': type.OptionalType(type.BooleanType()),
        'footer': type.OptionalType(type.ReferenceType(__name__, 'Footer')),
        'icons': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Icon'))),
        'is_drilldown': type.OptionalType(type.BooleanType()),
        'legend': type.OptionalType(type.ReferenceType(__name__, 'Legend')),
        'shared': type.OptionalType(type.BooleanType()),
        'span': type.OptionalType(type.IntegerType()),
        'weight': type.OptionalType(type.IntegerType()),
    },
    StatsConfiguration,
    False,
    None))



class Tag(VapiStruct):
    """
    Arbitrary key-value pairs that may be attached to an entity

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'scope': 'scope',
                            'tag': 'tag',
                            }

    def __init__(self,
                 scope=None,
                 tag=None,
                ):
        """
        :type  scope: :class:`str` or ``None``
        :param scope: Tag searches may optionally be restricted by scope
        :type  tag: :class:`str` or ``None``
        :param tag: Identifier meaningful to user with maximum length of 256 characters
        """
        self.scope = scope
        self.tag = tag
        VapiStruct.__init__(self)


Tag._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.tag', {
        'scope': type.OptionalType(type.StringType()),
        'tag': type.OptionalType(type.StringType()),
    },
    Tag,
    False,
    None))



class TagBulkOperation(VapiStruct):
    """
    Tag and resource information on which tag to be applied or removed.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'apply_to': 'apply_to',
                            'remove_from': 'remove_from',
                            'tag': 'tag',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 apply_to=None,
                 remove_from=None,
                 tag=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  apply_to: :class:`list` of :class:`ResourceInfo` or ``None``
        :param apply_to: List of resources on which tag needs to be applied
        :type  remove_from: :class:`list` of :class:`ResourceInfo` or ``None``
        :param remove_from: List of resources from which tag needs to be removed
        :type  tag: :class:`Tag` or ``None``
        :param tag: Tag
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.apply_to = apply_to
        self.remove_from = remove_from
        self.tag = tag
        VapiStruct.__init__(self)


TagBulkOperation._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.tag_bulk_operation', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'apply_to': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceInfo'))),
        'remove_from': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceInfo'))),
        'tag': type.OptionalType(type.ReferenceType(__name__, 'Tag')),
    },
    TagBulkOperation,
    False,
    None))



class TagBulkOperationStatus(VapiStruct):
    """
    Status of tag bulk operation

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    STATUS_SUCCESS = "Success"
    """


    """
    STATUS_RUNNING = "Running"
    """


    """
    STATUS_ERROR = "Error"
    """


    """
    STATUS_PENDING = "Pending"
    """


    """



    _canonical_to_pep_names = {
                            'apply_to': 'apply_to',
                            'path': 'path',
                            'remove_from': 'remove_from',
                            'status': 'status',
                            'tag': 'tag',
                            }

    def __init__(self,
                 apply_to=None,
                 path=None,
                 remove_from=None,
                 status=None,
                 tag=None,
                ):
        """
        :type  apply_to: :class:`list` of :class:`ResourceTypeTagStatus` or ``None``
        :param apply_to: Tag apply operation status per resource type.
        :type  path: :class:`str` or ``None``
        :param path: Intent path corresponding to tag operation
        :type  remove_from: :class:`list` of :class:`ResourceTypeTagStatus` or ``None``
        :param remove_from: Tag remove operation status per resource type
        :type  status: :class:`str` or ``None``
        :param status: Possible values are: 
            
            * :attr:`TagBulkOperationStatus.STATUS_SUCCESS`
            * :attr:`TagBulkOperationStatus.STATUS_RUNNING`
            * :attr:`TagBulkOperationStatus.STATUS_ERROR`
            * :attr:`TagBulkOperationStatus.STATUS_PENDING`
            
             Overall status
        :type  tag: :class:`Tag` or ``None``
        :param tag: Tag
        """
        self.apply_to = apply_to
        self.path = path
        self.remove_from = remove_from
        self.status = status
        self.tag = tag
        VapiStruct.__init__(self)


TagBulkOperationStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.tag_bulk_operation_status', {
        'apply_to': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceTypeTagStatus'))),
        'path': type.OptionalType(type.StringType()),
        'remove_from': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceTypeTagStatus'))),
        'status': type.OptionalType(type.StringType()),
        'tag': type.OptionalType(type.ReferenceType(__name__, 'Tag')),
    },
    TagBulkOperationStatus,
    False,
    None))



class TagInfo(VapiStruct):
    """
    Information about arbitrary key-value pairs that may be attached to an
    entity

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'scope': 'scope',
                            'tag': 'tag',
                            'tagged_objects_count': 'tagged_objects_count',
                            }

    def __init__(self,
                 scope=None,
                 tag=None,
                 tagged_objects_count=None,
                ):
        """
        :type  scope: :class:`str` or ``None``
        :param scope: Tag searches may optionally be restricted by scope
        :type  tag: :class:`str` or ``None``
        :param tag: Identifier meaningful to user with maximum length of 256 characters
        :type  tagged_objects_count: :class:`long` or ``None``
        :param tagged_objects_count: Number of objects with assigned with matching scope and tag values
            format: int32
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.scope = scope
        self.tag = tag
        self.tagged_objects_count = tagged_objects_count
        VapiStruct.__init__(self)


TagInfo._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.tag_info', {
        'scope': type.OptionalType(type.StringType()),
        'tag': type.OptionalType(type.StringType()),
        'tagged_objects_count': type.OptionalType(type.IntegerType()),
    },
    TagInfo,
    False,
    None))



class TagInfoListResult(VapiStruct):
    """
    Paged Collection of Tags

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`TagInfo` or ``None``
        :param results: Tag info list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


TagInfoListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.tag_info_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'TagInfo'))),
    },
    TagInfoListResult,
    False,
    None))



class TaskListResult(VapiStruct):
    """
    Task query results

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`TaskProperties` or ``None``
        :param results: Task property results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


TaskListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.task_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'TaskProperties'))),
    },
    TaskListResult,
    False,
    None))



class TaskProperties(VapiStruct):
    """
    Task properties

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    STATUS_RUNNING = "running"
    """


    """
    STATUS_ERROR = "error"
    """


    """
    STATUS_SUCCESS = "success"
    """


    """
    STATUS_CANCELING = "canceling"
    """


    """
    STATUS_CANCELED = "canceled"
    """


    """
    STATUS_KILLED = "killed"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'async_response_available': 'async_response_available',
                            'cancelable': 'cancelable',
                            'description': 'description',
                            'end_time': 'end_time',
                            'id': 'id',
                            'message': 'message',
                            'progress': 'progress',
                            'request_method': 'request_method',
                            'request_uri': 'request_uri',
                            'start_time': 'start_time',
                            'status': 'status',
                            'user': 'user',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 async_response_available=None,
                 cancelable=None,
                 description=None,
                 end_time=None,
                 id=None,
                 message=None,
                 progress=None,
                 request_method=None,
                 request_uri=None,
                 start_time=None,
                 status=None,
                 user=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  async_response_available: :class:`bool` or ``None``
        :param async_response_available: True if response for asynchronous request is available
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  cancelable: :class:`bool` or ``None``
        :param cancelable: True if this task can be canceled
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of the task
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  end_time: :class:`long` or ``None``
        :param end_time: The end time of the task in epoch milliseconds format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  id: :class:`str` or ``None``
        :param id: Identifier for this task
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  message: :class:`str` or ``None``
        :param message: A message describing the disposition of the task
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  progress: :class:`long` or ``None``
        :param progress: Task progress if known, from 0 to 100 format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  request_method: :class:`str` or ``None``
        :param request_method: HTTP request method
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  request_uri: :class:`str` or ``None``
        :param request_uri: URI of the method invocation that spawned this task
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  start_time: :class:`long` or ``None``
        :param start_time: The start time of the task in epoch milliseconds format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  status: :class:`str` or ``None``
        :param status: Possible values are: 
            
            * :attr:`TaskProperties.STATUS_RUNNING`
            * :attr:`TaskProperties.STATUS_ERROR`
            * :attr:`TaskProperties.STATUS_SUCCESS`
            * :attr:`TaskProperties.STATUS_CANCELING`
            * :attr:`TaskProperties.STATUS_CANCELED`
            * :attr:`TaskProperties.STATUS_KILLED`
            
             Current status of the task
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  user: :class:`str` or ``None``
        :param user: Name of the user who created this task
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.async_response_available = async_response_available
        self.cancelable = cancelable
        self.description = description
        self.end_time = end_time
        self.id = id
        self.message = message
        self.progress = progress
        self.request_method = request_method
        self.request_uri = request_uri
        self.start_time = start_time
        self.status = status
        self.user = user
        VapiStruct.__init__(self)


TaskProperties._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.task_properties', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'async_response_available': type.OptionalType(type.BooleanType()),
        'cancelable': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'end_time': type.OptionalType(type.IntegerType()),
        'id': type.OptionalType(type.StringType()),
        'message': type.OptionalType(type.StringType()),
        'progress': type.OptionalType(type.IntegerType()),
        'request_method': type.OptionalType(type.StringType()),
        'request_uri': type.OptionalType(type.StringType()),
        'start_time': type.OptionalType(type.IntegerType()),
        'status': type.OptionalType(type.StringType()),
        'user': type.OptionalType(type.StringType()),
    },
    TaskProperties,
    False,
    None))



class TcpHeader(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'dst_port': 'dst_port',
                            'src_port': 'src_port',
                            'tcp_flags': 'tcp_flags',
                            }

    def __init__(self,
                 dst_port=None,
                 src_port=None,
                 tcp_flags=None,
                ):
        """
        :type  dst_port: :class:`long` or ``None``
        :param dst_port: Destination port of tcp header format: int64
        :type  src_port: :class:`long` or ``None``
        :param src_port: Source port of tcp header format: int64
        :type  tcp_flags: :class:`long` or ``None``
        :param tcp_flags: TCP flags (9bits) format: int64
        """
        self.dst_port = dst_port
        self.src_port = src_port
        self.tcp_flags = tcp_flags
        VapiStruct.__init__(self)


TcpHeader._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.tcp_header', {
        'dst_port': type.OptionalType(type.IntegerType()),
        'src_port': type.OptionalType(type.IntegerType()),
        'tcp_flags': type.OptionalType(type.IntegerType()),
    },
    TcpHeader,
    False,
    None))



class TcpMaximumSegmentSizeClamping(VapiStruct):
    """
    TCP MSS Clamping Direction and Value.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    DIRECTION_NONE = "NONE"
    """


    """
    DIRECTION_INBOUND_CONNECTION = "INBOUND_CONNECTION"
    """


    """
    DIRECTION_OUTBOUND_CONNECTION = "OUTBOUND_CONNECTION"
    """


    """
    DIRECTION_BOTH = "BOTH"
    """


    """



    _canonical_to_pep_names = {
                            'direction': 'direction',
                            'max_segment_size': 'max_segment_size',
                            }

    def __init__(self,
                 direction=None,
                 max_segment_size=None,
                ):
        """
        :type  direction: :class:`str` or ``None``
        :param direction: Possible values are: 
            
            * :attr:`TcpMaximumSegmentSizeClamping.DIRECTION_NONE`
            *
              :attr:`TcpMaximumSegmentSizeClamping.DIRECTION_INBOUND_CONNECTION`
            *
              :attr:`TcpMaximumSegmentSizeClamping.DIRECTION_OUTBOUND_CONNECTION`
            * :attr:`TcpMaximumSegmentSizeClamping.DIRECTION_BOTH`
            
             Specifies the traffic direction for which to apply MSS Clamping.
        :type  max_segment_size: :class:`long` or ``None``
        :param max_segment_size: MSS defines the maximum amount of data that a host is willing to
            accept in a single TCP segment. This field is set in TCP header
            during connection establishment. To avoid packet fragmentation, you
            can set this field depending on uplink MTU and VPN overhead. This
            is an optional field and in case it is left unconfigured, best
            possible MSS value will be calculated based on effective mtu of
            uplink interface. Supported MSS range is 216 to 8960. format: int64
        """
        self.direction = direction
        self.max_segment_size = max_segment_size
        VapiStruct.__init__(self)


TcpMaximumSegmentSizeClamping._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.tcp_maximum_segment_size_clamping', {
        'direction': type.OptionalType(type.StringType()),
        'max_segment_size': type.OptionalType(type.IntegerType()),
    },
    TcpMaximumSegmentSizeClamping,
    False,
    None))



class TcpPolicyLbMonitorProfile(VapiStruct):
    """
    Active healthchecks are disabled by default and can be enabled for a server
    pool by binding a health monitor to the Group through the PolicyLbRule
    object. This represents active health monitoring over TCP. Active
    healthchecks are initiated periodically, at a configurable interval, to
    each member of the Group. Only if a healthcheck fails consecutively for a
    specified number of times (fall_count) to a member will the member status
    be marked DOWN. Once a member is DOWN, a specified number of consecutive
    successful healthchecks (rise_count) will bring the member back to UP
    state. After a healthcheck is initiated, if it does not complete within a
    certain period, then also the healthcheck is considered to be unsuccessful.
    Completing a healthcheck within timeout means establishing a connection
    (TCP or SSL), if applicable, sending the request and receiving the
    response, all within the configured timeout.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "TcpPolicyLbMonitorProfile"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'fall_count': 'fall_count',
                            'interval': 'interval',
                            'monitor_port': 'monitor_port',
                            'rise_count': 'rise_count',
                            'timeout': 'timeout',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='TcpPolicyLbMonitorProfile',
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 fall_count=None,
                 interval=None,
                 monitor_port=None,
                 rise_count=None,
                 timeout=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`PolicyLbMonitorProfile.RESOURCE_TYPE_TCPPOLICYLBMONITORPROFILE`
            *
              :attr:`PolicyLbMonitorProfile.RESOURCE_TYPE_UDPPOLICYLBMONITORPROFILE`
            *
              :attr:`PolicyLbMonitorProfile.RESOURCE_TYPE_ICMPPOLICYLBMONITORPROFILE`
            *
              :attr:`PolicyLbMonitorProfile.RESOURCE_TYPE_HTTPPOLICYLBMONITORPROFILE`
            *
              :attr:`PolicyLbMonitorProfile.RESOURCE_TYPE_HTTPSPOLICYLBMONITORPROFILE`
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  fall_count: :class:`long` or ``None``
        :param fall_count: Only if a healthcheck fails consecutively for a specified number of
            times, given with fall_count, to a member will the member status be
            marked DOWN. format: int64
        :type  interval: :class:`long` or ``None``
        :param interval: Active healthchecks are initiated periodically, at a configurable
            interval (in seconds), to each member of the Group. format: int64
        :type  monitor_port: :class:`long` or ``None``
        :param monitor_port: Typically, monitors perform healthchecks to Group members using the
            member IP address and pool_port. However, in some cases, customers
            prefer to run healthchecks against a different port than the pool
            member port which handles actual application traffic. In such
            cases, the port to run healthchecks against can be specified in the
            monitor_port value. format: int32
        :type  rise_count: :class:`long` or ``None``
        :param rise_count: Once a member is DOWN, a specified number of consecutive successful
            healthchecks specified by rise_count will bring the member back to
            UP state. format: int64
        :type  timeout: :class:`long` or ``None``
        :param timeout: Timeout specified in seconds. After a healthcheck is initiated, if
            it does not complete within a certain period, then also the
            healthcheck is considered to be unsuccessful. Completing a
            healthcheck within timeout means establishing a connection (TCP or
            SSL), if applicable, sending the request and receiving the
            response, all within the configured timeout. format: int64
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.fall_count = fall_count
        self.interval = interval
        self.monitor_port = monitor_port
        self.rise_count = rise_count
        self.timeout = timeout
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

TcpPolicyLbMonitorProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.tcp_policy_lb_monitor_profile', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'fall_count': type.OptionalType(type.IntegerType()),
        'interval': type.OptionalType(type.IntegerType()),
        'monitor_port': type.OptionalType(type.IntegerType()),
        'rise_count': type.OptionalType(type.IntegerType()),
        'timeout': type.OptionalType(type.IntegerType()),
    },
    TcpPolicyLbMonitorProfile,
    False,
    None))



class TcpPolicyLbVirtualServer(VapiStruct):
    """
    Virtual server acts as a facade to an application, receives all client
    connections over TCP and distributes them among the backend servers.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "TcpPolicyLbVirtualServer"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'access_log_enabled': 'access_log_enabled',
                            'ip_address': 'ip_address',
                            'lb_persistence_profile': 'lb_persistence_profile',
                            'ports': 'ports',
                            'router_path': 'router_path',
                            'traffic_source': 'traffic_source',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='TcpPolicyLbVirtualServer',
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 access_log_enabled=None,
                 ip_address=None,
                 lb_persistence_profile=None,
                 ports=None,
                 router_path=None,
                 traffic_source=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`PolicyLbVirtualServer.RESOURCE_TYPE_TCPPOLICYLBVIRTUALSERVER`
            *
              :attr:`PolicyLbVirtualServer.RESOURCE_TYPE_UDPPOLICYLBVIRTUALSERVER`
            *
              :attr:`PolicyLbVirtualServer.RESOURCE_TYPE_HTTPPOLICYLBVIRTUALSERVER`
            *
              :attr:`PolicyLbVirtualServer.RESOURCE_TYPE_HTTPSPOLICYLBVIRTUALSERVER`
            *
              :attr:`PolicyLbVirtualServer.RESOURCE_TYPE_CUSTOMPOLICYLBVIRTUALSERVER`
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  access_log_enabled: :class:`bool` or ``None``
        :param access_log_enabled: If access log is enabled, all HTTP requests sent to an L7 virtual
            server are logged to the access log file. Both successful requests
            (backend server returns 2xx) and unsuccessful requests (backend
            server returns 4xx or 5xx) are logged to access log, if enabled.
        :type  ip_address: :class:`str` or ``None``
        :param ip_address: Configures the IP address of the PolicyLbVirtualServer where it
            receives all client connections and distributes them among the
            backend servers. format: ip
        :type  lb_persistence_profile: :class:`str` or ``None``
        :param lb_persistence_profile: Path to optional object that enables persistence on a virtual
            server allowing related client connections to be sent to the same
            backend server. Persistence is disabled by default.
        :type  ports: :class:`list` of :class:`str` or ``None``
        :param ports: Ports contains a list of at least one port or port range such as
            \"80\", \"1234-1236\". Each port element in the list should be a
            single port or a single port range. format: port-or-range
        :type  router_path: :class:`str` or ``None``
        :param router_path: Path to router type object that PolicyLbVirtualServer connects to.
            The only supported router object is Network.
        :type  traffic_source: :class:`str` or ``None``
        :param traffic_source: 
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.access_log_enabled = access_log_enabled
        self.ip_address = ip_address
        self.lb_persistence_profile = lb_persistence_profile
        self.ports = ports
        self.router_path = router_path
        self.traffic_source = traffic_source
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

TcpPolicyLbVirtualServer._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.tcp_policy_lb_virtual_server', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'access_log_enabled': type.OptionalType(type.BooleanType()),
        'ip_address': type.OptionalType(type.StringType()),
        'lb_persistence_profile': type.OptionalType(type.StringType()),
        'ports': type.OptionalType(type.ListType(type.StringType())),
        'router_path': type.OptionalType(type.StringType()),
        'traffic_source': type.OptionalType(type.StringType()),
    },
    TcpPolicyLbVirtualServer,
    False,
    None))



class Tier0(VapiStruct):
    """
    Tier-0 configuration for external connectivity.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    FAILOVER_MODE_PREEMPTIVE = "PREEMPTIVE"
    """


    """
    FAILOVER_MODE_NON_PREEMPTIVE = "NON_PREEMPTIVE"
    """


    """
    HA_MODE_ACTIVE = "ACTIVE_ACTIVE"
    """


    """
    HA_MODE_STANDBY = "ACTIVE_STANDBY"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'default_rule_logging': 'default_rule_logging',
                            'dhcp_config_paths': 'dhcp_config_paths',
                            'disable_firewall': 'disable_firewall',
                            'failover_mode': 'failover_mode',
                            'federation_config': 'federation_config',
                            'force_whitelisting': 'force_whitelisting',
                            'ha_mode': 'ha_mode',
                            'internal_transit_subnets': 'internal_transit_subnets',
                            'intersite_config': 'intersite_config',
                            'ipv6_profile_paths': 'ipv6_profile_paths',
                            'rd_admin_field': 'rd_admin_field',
                            'transit_subnets': 'transit_subnets',
                            'vrf_config': 'vrf_config',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 default_rule_logging=None,
                 dhcp_config_paths=None,
                 disable_firewall=None,
                 failover_mode=None,
                 federation_config=None,
                 force_whitelisting=None,
                 ha_mode=None,
                 internal_transit_subnets=None,
                 intersite_config=None,
                 ipv6_profile_paths=None,
                 rd_admin_field=None,
                 transit_subnets=None,
                 vrf_config=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  default_rule_logging: :class:`bool` or ``None``
        :param default_rule_logging: Indicates if logging should be enabled for the default whitelisting
            rule. This field is deprecated and recommended to change Rule
            logging field. Note that this field is not synchronized with
            default logging field.
        :type  dhcp_config_paths: :class:`list` of :class:`str` or ``None``
        :param dhcp_config_paths: DHCP configuration for Segments connected to Tier-0. DHCP service
            is configured in relay mode.
        :type  disable_firewall: :class:`bool` or ``None``
        :param disable_firewall: Disable or enable gateway fiewall.
        :type  failover_mode: :class:`str` or ``None``
        :param failover_mode: Possible values are: 
            
            * :attr:`Tier0.FAILOVER_MODE_PREEMPTIVE`
            * :attr:`Tier0.FAILOVER_MODE_NON_PREEMPTIVE`
            
            Determines the behavior when a Tier-0 instance in ACTIVE-STANDBY
            high-availability mode restarts after a failure. If set to
            PREEMPTIVE, the preferred node will take over, even if it causes
            another failure. If set to NON_PREEMPTIVE, then the instance that
            restarted will remain secondary. This property is not used when the
            ha_mode property is set to ACTIVE_ACTIVE. Only applicable when edge
            cluster is configured in Tier0 locale-service.
        :type  federation_config: :class:`FederationGatewayConfig` or ``None``
        :param federation_config: Additional config for federation.
        :type  force_whitelisting: :class:`bool` or ``None``
        :param force_whitelisting: This field is deprecated and recommended to change Rule action
            field. Note that this field is not synchronized with default rule
            field.
        :type  ha_mode: :class:`str` or ``None``
        :param ha_mode: Possible values are: 
            
            * :attr:`Tier0.HA_MODE_ACTIVE`
            * :attr:`Tier0.HA_MODE_STANDBY`
            
            Specify high-availability mode for Tier-0. Default is
            ACTIVE_ACTIVE. When ha_mode is changed from ACTIVE_ACTIVE to
            ACTIVE_STANDBY, inter SR iBGP (in BGP) is disabled. Changing
            ha_mode from ACTIVE_STANDBY to ACTIVE_ACTIVE will enable inter SR
            iBGP (in BGP) and previously configured preferred edge nodes (in
            Tier0 locale-service) are removed.
        :type  internal_transit_subnets: :class:`list` of :class:`str` or ``None``
        :param internal_transit_subnets: Specify subnets that are used to assign addresses to logical links
            connecting service routers and distributed routers. Only IPv4
            addresses are supported. When not specified, subnet 169.254.0.0/24
            is assigned by default in ACTIVE_ACTIVE HA mode or 169.254.0.0/28
            in ACTIVE_STANDBY mode. format: ip-cidr-block
        :type  intersite_config: :class:`IntersiteGatewayConfig` or ``None``
        :param intersite_config: Inter site routing configuration when the gateway is streched.
        :type  ipv6_profile_paths: :class:`list` of :class:`str` or ``None``
        :param ipv6_profile_paths: IPv6 NDRA and DAD profiles configuration on Tier0. Either or both
            NDRA and/or DAD profiles can be configured.
        :type  rd_admin_field: :class:`str` or ``None``
        :param rd_admin_field: If you are using EVPN service, then route distinguisher
            administrator address should be defined if you need auto generation
            of route distinguisher on your VRF configuration. format: ip
        :type  transit_subnets: :class:`list` of :class:`str` or ``None``
        :param transit_subnets: Specify transit subnets that are used to assign addresses to
            logical links connecting tier-0 and tier-1s. Both IPv4 and IPv6
            addresses are supported. When not specified, subnet 100.64.0.0/16
            is configured by default. format: ip-cidr-block
        :type  vrf_config: :class:`Tier0VrfConfig` or ``None``
        :param vrf_config: VRF config, required for VRF Tier0.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.default_rule_logging = default_rule_logging
        self.dhcp_config_paths = dhcp_config_paths
        self.disable_firewall = disable_firewall
        self.failover_mode = failover_mode
        self.federation_config = federation_config
        self.force_whitelisting = force_whitelisting
        self.ha_mode = ha_mode
        self.internal_transit_subnets = internal_transit_subnets
        self.intersite_config = intersite_config
        self.ipv6_profile_paths = ipv6_profile_paths
        self.rd_admin_field = rd_admin_field
        self.transit_subnets = transit_subnets
        self.vrf_config = vrf_config
        VapiStruct.__init__(self)


Tier0._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.tier0', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'default_rule_logging': type.OptionalType(type.BooleanType()),
        'dhcp_config_paths': type.OptionalType(type.ListType(type.StringType())),
        'disable_firewall': type.OptionalType(type.BooleanType()),
        'failover_mode': type.OptionalType(type.StringType()),
        'federation_config': type.OptionalType(type.ReferenceType(__name__, 'FederationGatewayConfig')),
        'force_whitelisting': type.OptionalType(type.BooleanType()),
        'ha_mode': type.OptionalType(type.StringType()),
        'internal_transit_subnets': type.OptionalType(type.ListType(type.StringType())),
        'intersite_config': type.OptionalType(type.ReferenceType(__name__, 'IntersiteGatewayConfig')),
        'ipv6_profile_paths': type.OptionalType(type.ListType(type.StringType())),
        'rd_admin_field': type.OptionalType(type.StringType()),
        'transit_subnets': type.OptionalType(type.ListType(type.StringType())),
        'vrf_config': type.OptionalType(type.ReferenceType(__name__, 'Tier0VrfConfig')),
    },
    Tier0,
    False,
    None))



class Tier0DeploymentMap(VapiStruct):
    """
    Binding of Tier-0 to the enforcement point.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'enforcement_point': 'enforcement_point',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 enforcement_point=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  enforcement_point: :class:`str` or ``None``
        :param enforcement_point: Path of enforcement point on which Tier-0 shall be deployed.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.enforcement_point = enforcement_point
        VapiStruct.__init__(self)


Tier0DeploymentMap._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.tier0_deployment_map', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'enforcement_point': type.OptionalType(type.StringType()),
    },
    Tier0DeploymentMap,
    False,
    None))



class Tier0DeploymentMapListResult(VapiStruct):
    """
    Paged collection of Tier-0 Deployment Map.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`Tier0DeploymentMap` or ``None``
        :param results: Tier-0 Deployment Maps.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


Tier0DeploymentMapListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.tier0_deployment_map_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tier0DeploymentMap'))),
    },
    Tier0DeploymentMapListResult,
    False,
    None))



class Tier0GatewayState(VapiStruct):
    """
    Tier0 gateway state

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'enforcement_point_path': 'enforcement_point_path',
                            'ipv6_status': 'ipv6_status',
                            'tier0_state': 'tier0_state',
                            'tier0_status': 'tier0_status',
                            }

    def __init__(self,
                 enforcement_point_path=None,
                 ipv6_status=None,
                 tier0_state=None,
                 tier0_status=None,
                ):
        """
        :type  enforcement_point_path: :class:`str` or ``None``
        :param enforcement_point_path: String Path of the enforcement point. When not specified, routes
            from all enforcement-points are returned.
        :type  ipv6_status: :class:`list` of :class:`IPv6Status` or ``None``
        :param ipv6_status: IPv6 DAD status for interfaces configured on Tier0
        :type  tier0_state: :class:`LogicalRouterState` or ``None``
        :param tier0_state: Detailed realized state information for Tier0
        :type  tier0_status: :class:`LogicalRouterStatus` or ``None``
        :param tier0_status: Detailed realized status information for Tier0
        """
        self.enforcement_point_path = enforcement_point_path
        self.ipv6_status = ipv6_status
        self.tier0_state = tier0_state
        self.tier0_status = tier0_status
        VapiStruct.__init__(self)


Tier0GatewayState._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.tier0_gateway_state', {
        'enforcement_point_path': type.OptionalType(type.StringType()),
        'ipv6_status': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'IPv6Status'))),
        'tier0_state': type.OptionalType(type.ReferenceType(__name__, 'LogicalRouterState')),
        'tier0_status': type.OptionalType(type.ReferenceType(__name__, 'LogicalRouterStatus')),
    },
    Tier0GatewayState,
    False,
    None))



class Tier0HaVipConfig(VapiStruct):
    """
    Tier0 HA VIP Config

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'enabled': 'enabled',
                            'external_interface_paths': 'external_interface_paths',
                            'vip_subnets': 'vip_subnets',
                            }

    def __init__(self,
                 enabled=None,
                 external_interface_paths=None,
                 vip_subnets=None,
                ):
        """
        :type  enabled: :class:`bool` or ``None``
        :param enabled: Flag to enable this HA VIP config.
        :type  external_interface_paths: :class:`list` of :class:`str` or ``None``
        :param external_interface_paths: Policy paths to Tier0 external interfaces which are to be paired to
            provide redundancy. Floating IP will be owned by one of these
            interfaces depending upon which edge node is Active.
        :type  vip_subnets: :class:`list` of :class:`InterfaceSubnet` or ``None``
        :param vip_subnets: Array of IP address subnets which will be used as floating IP
            addresses.
        """
        self.enabled = enabled
        self.external_interface_paths = external_interface_paths
        self.vip_subnets = vip_subnets
        VapiStruct.__init__(self)


Tier0HaVipConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.tier0_ha_vip_config', {
        'enabled': type.OptionalType(type.BooleanType()),
        'external_interface_paths': type.OptionalType(type.ListType(type.StringType())),
        'vip_subnets': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'InterfaceSubnet'))),
    },
    Tier0HaVipConfig,
    False,
    None))



class Tier0Interface(VapiStruct):
    """
    Tier-0 interface configuration for external connectivity.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    TYPE_EXTERNAL = "EXTERNAL"
    """


    """
    TYPE_SERVICE = "SERVICE"
    """


    """
    TYPE_LOOPBACK = "LOOPBACK"
    """


    """
    URPF_MODE_NONE = "NONE"
    """


    """
    URPF_MODE_STRICT = "STRICT"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'subnets': 'subnets',
                            'access_vlan_id': 'access_vlan_id',
                            'edge_cluster_member_index': 'edge_cluster_member_index',
                            'edge_path': 'edge_path',
                            'ipv6_profile_paths': 'ipv6_profile_paths',
                            'ls_id': 'ls_id',
                            'mtu': 'mtu',
                            'multicast': 'multicast',
                            'proxy_arp_filters': 'proxy_arp_filters',
                            'segment_path': 'segment_path',
                            'type': 'type',
                            'urpf_mode': 'urpf_mode',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 subnets=None,
                 access_vlan_id=None,
                 edge_cluster_member_index=None,
                 edge_path=None,
                 ipv6_profile_paths=None,
                 ls_id=None,
                 mtu=None,
                 multicast=None,
                 proxy_arp_filters=None,
                 segment_path=None,
                 type=None,
                 urpf_mode=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  subnets: :class:`list` of :class:`InterfaceSubnet` or ``None``
        :param subnets: Specify IP address and network prefix for interface.
        :type  access_vlan_id: :class:`long` or ``None``
        :param access_vlan_id: Vlan id. format: int64
        :type  edge_cluster_member_index: :class:`long` or ``None``
        :param edge_cluster_member_index: Specify association of interface with edge cluster member. This
            property is deprecated, use edge_path instead. When both properties
            are specifed, only edge_path property is used. format: int32
        :type  edge_path: :class:`str` or ``None``
        :param edge_path: Policy path to edge node to handle external connectivity. Required
            when interface type is EXTERNAL.
        :type  ipv6_profile_paths: :class:`list` of :class:`str` or ``None``
        :param ipv6_profile_paths: Configuration IPv6 NDRA profile. Only one NDRA profile can be
            configured.
        :type  ls_id: :class:`str` or ``None``
        :param ls_id: Specify logical switch to which tier-0 interface is connected for
            external access. This property is deprecated, use segment_path
            instead. Both properties cannot be used together.
        :type  mtu: :class:`long` or ``None``
        :param mtu: Maximum transmission unit (MTU) specifies the size of the largest
            packet that a network protocol can transmit. format: int32
        :type  multicast: :class:`Tier0InterfacePimConfig` or ``None``
        :param multicast: Multicast PIM configuration.
        :type  proxy_arp_filters: :class:`list` of :class:`str` or ``None``
        :param proxy_arp_filters: Array of prefix lists used to specify filtering for ARP proxy.
            Prefixes in this array are used to configure ARP proxy entries on
            Tier-0 gateway (for uplinks).
        :type  segment_path: :class:`str` or ``None``
        :param segment_path: Specify Segment to which this interface is connected to. Either
            segment_path or ls_id property is required.
        :type  type: :class:`str` or ``None``
        :param type: Possible values are: 
            
            * :attr:`Tier0Interface.TYPE_EXTERNAL`
            * :attr:`Tier0Interface.TYPE_SERVICE`
            * :attr:`Tier0Interface.TYPE_LOOPBACK`
            
             Interface type
        :type  urpf_mode: :class:`str` or ``None``
        :param urpf_mode: Possible values are: 
            
            * :attr:`Tier0Interface.URPF_MODE_NONE`
            * :attr:`Tier0Interface.URPF_MODE_STRICT`
            
             Unicast Reverse Path Forwarding mode
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.subnets = subnets
        self.access_vlan_id = access_vlan_id
        self.edge_cluster_member_index = edge_cluster_member_index
        self.edge_path = edge_path
        self.ipv6_profile_paths = ipv6_profile_paths
        self.ls_id = ls_id
        self.mtu = mtu
        self.multicast = multicast
        self.proxy_arp_filters = proxy_arp_filters
        self.segment_path = segment_path
        self.type = type
        self.urpf_mode = urpf_mode
        VapiStruct.__init__(self)


Tier0Interface._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.tier0_interface', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'subnets': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'InterfaceSubnet'))),
        'access_vlan_id': type.OptionalType(type.IntegerType()),
        'edge_cluster_member_index': type.OptionalType(type.IntegerType()),
        'edge_path': type.OptionalType(type.StringType()),
        'ipv6_profile_paths': type.OptionalType(type.ListType(type.StringType())),
        'ls_id': type.OptionalType(type.StringType()),
        'mtu': type.OptionalType(type.IntegerType()),
        'multicast': type.OptionalType(type.ReferenceType(__name__, 'Tier0InterfacePimConfig')),
        'proxy_arp_filters': type.OptionalType(type.ListType(type.StringType())),
        'segment_path': type.OptionalType(type.StringType()),
        'type': type.OptionalType(type.StringType()),
        'urpf_mode': type.OptionalType(type.StringType()),
    },
    Tier0Interface,
    False,
    None))



class Tier0InterfaceListResult(VapiStruct):
    """
    Paged collection of Tier-0 Interfaces

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`Tier0Interface` or ``None``
        :param results: Tier-0 Interface list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


Tier0InterfaceListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.tier0_interface_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tier0Interface'))),
    },
    Tier0InterfaceListResult,
    False,
    None))



class Tier0InterfacePimConfig(VapiStruct):
    """
    Multicast PIM configuration.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'enabled': 'enabled',
                            }

    def __init__(self,
                 enabled=None,
                ):
        """
        :type  enabled: :class:`bool` or ``None``
        :param enabled: enable/disable PIM configuration.
        """
        self.enabled = enabled
        VapiStruct.__init__(self)


Tier0InterfacePimConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.tier0_interface_pim_config', {
        'enabled': type.OptionalType(type.BooleanType()),
    },
    Tier0InterfacePimConfig,
    False,
    None))



class Tier0ListResult(VapiStruct):
    """
    Paged collection of Tier-0s

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`Tier0` or ``None``
        :param results: Tier-0 list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


Tier0ListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.tier0_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tier0'))),
    },
    Tier0ListResult,
    False,
    None))



class Tier0RouteMap(VapiStruct):
    """
    RouteMap for redistributing routes to BGP and other routing protocols

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'entries': 'entries',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 entries=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  entries: :class:`list` of :class:`RouteMapEntry` or ``None``
        :param entries: Ordered list of route map entries.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.entries = entries
        VapiStruct.__init__(self)


Tier0RouteMap._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.tier0_route_map', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'entries': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'RouteMapEntry'))),
    },
    Tier0RouteMap,
    False,
    None))



class Tier0RouteMapListResult(VapiStruct):
    """
    Paged collection of RouteMaps

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`Tier0RouteMap` or ``None``
        :param results: Tier0RouteMap results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


Tier0RouteMapListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.tier0_route_map_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tier0RouteMap'))),
    },
    Tier0RouteMapListResult,
    False,
    None))



class Tier0RouteRedistributionConfig(VapiStruct):
    """
    Route Redistribution config

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'bgp_enabled': 'bgp_enabled',
                            'redistribution_rules': 'redistribution_rules',
                            }

    def __init__(self,
                 bgp_enabled=None,
                 redistribution_rules=None,
                ):
        """
        :type  bgp_enabled: :class:`bool` or ``None``
        :param bgp_enabled: Flag to enable route redistribution for BGP.
        :type  redistribution_rules: :class:`list` of :class:`Tier0RouteRedistributionRule` or ``None``
        :param redistribution_rules: List of redistribution rules.
        """
        self.bgp_enabled = bgp_enabled
        self.redistribution_rules = redistribution_rules
        VapiStruct.__init__(self)


Tier0RouteRedistributionConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.tier0_route_redistribution_config', {
        'bgp_enabled': type.OptionalType(type.BooleanType()),
        'redistribution_rules': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tier0RouteRedistributionRule'))),
    },
    Tier0RouteRedistributionConfig,
    False,
    None))



class Tier0RouteRedistributionRule(VapiStruct):
    """
    Single route redistribution rule

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    ROUTE_REDISTRIBUTION_TYPES_TIER0_STATIC = "TIER0_STATIC"
    """


    """
    ROUTE_REDISTRIBUTION_TYPES_TIER0_CONNECTED = "TIER0_CONNECTED"
    """


    """
    ROUTE_REDISTRIBUTION_TYPES_TIER0_EXTERNAL_INTERFACE = "TIER0_EXTERNAL_INTERFACE"
    """


    """
    ROUTE_REDISTRIBUTION_TYPES_TIER0_SEGMENT = "TIER0_SEGMENT"
    """


    """
    ROUTE_REDISTRIBUTION_TYPES_TIER0_ROUTER_LINK = "TIER0_ROUTER_LINK"
    """


    """
    ROUTE_REDISTRIBUTION_TYPES_TIER0_SERVICE_INTERFACE = "TIER0_SERVICE_INTERFACE"
    """


    """
    ROUTE_REDISTRIBUTION_TYPES_TIER0_LOOPBACK_INTERFACE = "TIER0_LOOPBACK_INTERFACE"
    """


    """
    ROUTE_REDISTRIBUTION_TYPES_TIER0_DNS_FORWARDER_IP = "TIER0_DNS_FORWARDER_IP"
    """


    """
    ROUTE_REDISTRIBUTION_TYPES_TIER0_IPSEC_LOCAL_IP = "TIER0_IPSEC_LOCAL_IP"
    """


    """
    ROUTE_REDISTRIBUTION_TYPES_TIER0_NAT = "TIER0_NAT"
    """


    """
    ROUTE_REDISTRIBUTION_TYPES_TIER0_EVPN_TEP_IP = "TIER0_EVPN_TEP_IP"
    """


    """
    ROUTE_REDISTRIBUTION_TYPES_TIER1_NAT = "TIER1_NAT"
    """


    """
    ROUTE_REDISTRIBUTION_TYPES_TIER1_STATIC = "TIER1_STATIC"
    """


    """
    ROUTE_REDISTRIBUTION_TYPES_TIER1_LB_VIP = "TIER1_LB_VIP"
    """


    """
    ROUTE_REDISTRIBUTION_TYPES_TIER1_LB_SNAT = "TIER1_LB_SNAT"
    """


    """
    ROUTE_REDISTRIBUTION_TYPES_TIER1_DNS_FORWARDER_IP = "TIER1_DNS_FORWARDER_IP"
    """


    """
    ROUTE_REDISTRIBUTION_TYPES_TIER1_CONNECTED = "TIER1_CONNECTED"
    """


    """
    ROUTE_REDISTRIBUTION_TYPES_TIER1_SERVICE_INTERFACE = "TIER1_SERVICE_INTERFACE"
    """


    """
    ROUTE_REDISTRIBUTION_TYPES_TIER1_SEGMENT = "TIER1_SEGMENT"
    """


    """
    ROUTE_REDISTRIBUTION_TYPES_TIER1_IPSEC_LOCAL_ENDPOINT = "TIER1_IPSEC_LOCAL_ENDPOINT"
    """


    """



    _canonical_to_pep_names = {
                            'name': 'name',
                            'route_map_path': 'route_map_path',
                            'route_redistribution_types': 'route_redistribution_types',
                            }

    def __init__(self,
                 name=None,
                 route_map_path=None,
                 route_redistribution_types=None,
                ):
        """
        :type  name: :class:`str` or ``None``
        :param name: Rule name
        :type  route_map_path: :class:`str` or ``None``
        :param route_map_path: Route map to be associated with the redistribution rule
        :type  route_redistribution_types: :class:`list` of :class:`str` or ``None``
        :param route_redistribution_types: Possible values are: 
            
            *
              :attr:`Tier0RouteRedistributionRule.ROUTE_REDISTRIBUTION_TYPES_TIER0_STATIC`
            *
              :attr:`Tier0RouteRedistributionRule.ROUTE_REDISTRIBUTION_TYPES_TIER0_CONNECTED`
            *
              :attr:`Tier0RouteRedistributionRule.ROUTE_REDISTRIBUTION_TYPES_TIER0_EXTERNAL_INTERFACE`
            *
              :attr:`Tier0RouteRedistributionRule.ROUTE_REDISTRIBUTION_TYPES_TIER0_SEGMENT`
            *
              :attr:`Tier0RouteRedistributionRule.ROUTE_REDISTRIBUTION_TYPES_TIER0_ROUTER_LINK`
            *
              :attr:`Tier0RouteRedistributionRule.ROUTE_REDISTRIBUTION_TYPES_TIER0_SERVICE_INTERFACE`
            *
              :attr:`Tier0RouteRedistributionRule.ROUTE_REDISTRIBUTION_TYPES_TIER0_LOOPBACK_INTERFACE`
            *
              :attr:`Tier0RouteRedistributionRule.ROUTE_REDISTRIBUTION_TYPES_TIER0_DNS_FORWARDER_IP`
            *
              :attr:`Tier0RouteRedistributionRule.ROUTE_REDISTRIBUTION_TYPES_TIER0_IPSEC_LOCAL_IP`
            *
              :attr:`Tier0RouteRedistributionRule.ROUTE_REDISTRIBUTION_TYPES_TIER0_NAT`
            *
              :attr:`Tier0RouteRedistributionRule.ROUTE_REDISTRIBUTION_TYPES_TIER0_EVPN_TEP_IP`
            *
              :attr:`Tier0RouteRedistributionRule.ROUTE_REDISTRIBUTION_TYPES_TIER1_NAT`
            *
              :attr:`Tier0RouteRedistributionRule.ROUTE_REDISTRIBUTION_TYPES_TIER1_STATIC`
            *
              :attr:`Tier0RouteRedistributionRule.ROUTE_REDISTRIBUTION_TYPES_TIER1_LB_VIP`
            *
              :attr:`Tier0RouteRedistributionRule.ROUTE_REDISTRIBUTION_TYPES_TIER1_LB_SNAT`
            *
              :attr:`Tier0RouteRedistributionRule.ROUTE_REDISTRIBUTION_TYPES_TIER1_DNS_FORWARDER_IP`
            *
              :attr:`Tier0RouteRedistributionRule.ROUTE_REDISTRIBUTION_TYPES_TIER1_CONNECTED`
            *
              :attr:`Tier0RouteRedistributionRule.ROUTE_REDISTRIBUTION_TYPES_TIER1_SERVICE_INTERFACE`
            *
              :attr:`Tier0RouteRedistributionRule.ROUTE_REDISTRIBUTION_TYPES_TIER1_SEGMENT`
            *
              :attr:`Tier0RouteRedistributionRule.ROUTE_REDISTRIBUTION_TYPES_TIER1_IPSEC_LOCAL_ENDPOINT`
            
             List of redistribution types
        """
        self.name = name
        self.route_map_path = route_map_path
        self.route_redistribution_types = route_redistribution_types
        VapiStruct.__init__(self)


Tier0RouteRedistributionRule._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.tier0_route_redistribution_rule', {
        'name': type.OptionalType(type.StringType()),
        'route_map_path': type.OptionalType(type.StringType()),
        'route_redistribution_types': type.OptionalType(type.ListType(type.StringType())),
    },
    Tier0RouteRedistributionRule,
    False,
    None))



class Tier0VrfConfig(VapiStruct):
    """
    Tier-0 vrf configuration.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'evpn_transit_vni': 'evpn_transit_vni',
                            'route_distinguisher': 'route_distinguisher',
                            'route_targets': 'route_targets',
                            'tier0_path': 'tier0_path',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 evpn_transit_vni=None,
                 route_distinguisher=None,
                 route_targets=None,
                 tier0_path=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  evpn_transit_vni: :class:`long` or ``None``
        :param evpn_transit_vni: L3 VNI associated with the VRF for overlay traffic. VNI must be
            unique and belong to configured VNI pool. format: int32
        :type  route_distinguisher: :class:`str` or ``None``
        :param route_distinguisher: 
        :type  route_targets: :class:`list` of :class:`VrfRouteTargets` or ``None``
        :param route_targets: Route targets.
        :type  tier0_path: :class:`str` or ``None``
        :param tier0_path: Default tier0 path. Cannot be modified after realization.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.evpn_transit_vni = evpn_transit_vni
        self.route_distinguisher = route_distinguisher
        self.route_targets = route_targets
        self.tier0_path = tier0_path
        VapiStruct.__init__(self)


Tier0VrfConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.tier0_vrf_config', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'evpn_transit_vni': type.OptionalType(type.IntegerType()),
        'route_distinguisher': type.OptionalType(type.StringType()),
        'route_targets': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'VrfRouteTargets'))),
        'tier0_path': type.OptionalType(type.StringType()),
    },
    Tier0VrfConfig,
    False,
    None))



class Tier1(VapiStruct):
    """
    Tier-1 instance configuration.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    FAILOVER_MODE_PREEMPTIVE = "PREEMPTIVE"
    """


    """
    FAILOVER_MODE_NON_PREEMPTIVE = "NON_PREEMPTIVE"
    """


    """
    POOL_ALLOCATION_ROUTING = "ROUTING"
    """


    """
    POOL_ALLOCATION_LB_SMALL = "LB_SMALL"
    """


    """
    POOL_ALLOCATION_LB_MEDIUM = "LB_MEDIUM"
    """


    """
    POOL_ALLOCATION_LB_LARGE = "LB_LARGE"
    """


    """
    POOL_ALLOCATION_LB_XLARGE = "LB_XLARGE"
    """


    """
    ROUTE_ADVERTISEMENT_TYPES_STATIC_ROUTES = "TIER1_STATIC_ROUTES"
    """


    """
    ROUTE_ADVERTISEMENT_TYPES_CONNECTED = "TIER1_CONNECTED"
    """


    """
    ROUTE_ADVERTISEMENT_TYPES_NAT = "TIER1_NAT"
    """


    """
    ROUTE_ADVERTISEMENT_TYPES_LB_VIP = "TIER1_LB_VIP"
    """


    """
    ROUTE_ADVERTISEMENT_TYPES_LB_SNAT = "TIER1_LB_SNAT"
    """


    """
    ROUTE_ADVERTISEMENT_TYPES_DNS_FORWARDER_IP = "TIER1_DNS_FORWARDER_IP"
    """


    """
    ROUTE_ADVERTISEMENT_TYPES_IPSEC_LOCAL_ENDPOINT = "TIER1_IPSEC_LOCAL_ENDPOINT"
    """


    """
    TYPE_ROUTED = "ROUTED"
    """


    """
    TYPE_ISOLATED = "ISOLATED"
    """


    """
    TYPE_NATTED = "NATTED"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'default_rule_logging': 'default_rule_logging',
                            'dhcp_config_paths': 'dhcp_config_paths',
                            'disable_firewall': 'disable_firewall',
                            'enable_standby_relocation': 'enable_standby_relocation',
                            'failover_mode': 'failover_mode',
                            'federation_config': 'federation_config',
                            'force_whitelisting': 'force_whitelisting',
                            'intersite_config': 'intersite_config',
                            'ipv6_profile_paths': 'ipv6_profile_paths',
                            'pool_allocation': 'pool_allocation',
                            'qos_profile': 'qos_profile',
                            'route_advertisement_rules': 'route_advertisement_rules',
                            'route_advertisement_types': 'route_advertisement_types',
                            'tier0_path': 'tier0_path',
                            'type': 'type',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 default_rule_logging=None,
                 dhcp_config_paths=None,
                 disable_firewall=None,
                 enable_standby_relocation=None,
                 failover_mode=None,
                 federation_config=None,
                 force_whitelisting=None,
                 intersite_config=None,
                 ipv6_profile_paths=None,
                 pool_allocation=None,
                 qos_profile=None,
                 route_advertisement_rules=None,
                 route_advertisement_types=None,
                 tier0_path=None,
                 type=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  default_rule_logging: :class:`bool` or ``None``
        :param default_rule_logging: Indicates if logging should be enabled for the default whitelisting
            rule. This field is deprecated and recommended to change Rule
            logging field. Note that this field is not synchronized with
            default logging field.
        :type  dhcp_config_paths: :class:`list` of :class:`str` or ``None``
        :param dhcp_config_paths: DHCP configuration for Segments connected to Tier-1. DHCP service
            is enabled in relay mode.
        :type  disable_firewall: :class:`bool` or ``None``
        :param disable_firewall: Disable or enable gateway fiewall.
        :type  enable_standby_relocation: :class:`bool` or ``None``
        :param enable_standby_relocation: Flag to enable standby service router relocation. Standby
            relocation is not enabled until edge cluster is configured for
            Tier1.
        :type  failover_mode: :class:`str` or ``None``
        :param failover_mode: Possible values are: 
            
            * :attr:`Tier1.FAILOVER_MODE_PREEMPTIVE`
            * :attr:`Tier1.FAILOVER_MODE_NON_PREEMPTIVE`
            
            Determines the behavior when a Tier-1 instance restarts after a
            failure. If set to PREEMPTIVE, the preferred node will take over,
            even if it causes another failure. If set to NON_PREEMPTIVE, then
            the instance that restarted will remain secondary. Only applicable
            when edge cluster is configured in Tier1 locale-service.
        :type  federation_config: :class:`FederationGatewayConfig` or ``None``
        :param federation_config: Additional config for federation.
        :type  force_whitelisting: :class:`bool` or ``None``
        :param force_whitelisting: This field is deprecated and recommended to change Rule action
            field. Note that this field is not synchornied with default rule
            field.
        :type  intersite_config: :class:`IntersiteGatewayConfig` or ``None``
        :param intersite_config: Inter site routing configuration when the gateway is streched.
        :type  ipv6_profile_paths: :class:`list` of :class:`str` or ``None``
        :param ipv6_profile_paths: Configuration IPv6 NDRA and DAD profiles. Either or both NDRA
            and/or DAD profiles can be configured.
        :type  pool_allocation: :class:`str` or ``None``
        :param pool_allocation: Possible values are: 
            
            * :attr:`Tier1.POOL_ALLOCATION_ROUTING`
            * :attr:`Tier1.POOL_ALLOCATION_LB_SMALL`
            * :attr:`Tier1.POOL_ALLOCATION_LB_MEDIUM`
            * :attr:`Tier1.POOL_ALLOCATION_LB_LARGE`
            * :attr:`Tier1.POOL_ALLOCATION_LB_XLARGE`
            
            Supports edge node allocation at different sizes for routing and
            load balancer service to meet performance and scalability
            requirements. ROUTING: Allocate edge node to provide routing
            services. LB_SMALL, LB_MEDIUM, LB_LARGE, LB_XLARGE: Specify size of
            load balancer service that will be configured on TIER1 gateway.
        :type  qos_profile: :class:`GatewayQosProfileConfig` or ``None``
        :param qos_profile: QoS Profile configuration for Tier1 router link connected to Tier0
            gateway.
        :type  route_advertisement_rules: :class:`list` of :class:`RouteAdvertisementRule` or ``None``
        :param route_advertisement_rules: Route advertisement rules and filtering
        :type  route_advertisement_types: :class:`list` of :class:`str` or ``None``
        :param route_advertisement_types: Possible values are: 
            
            * :attr:`Tier1.ROUTE_ADVERTISEMENT_TYPES_STATIC_ROUTES`
            * :attr:`Tier1.ROUTE_ADVERTISEMENT_TYPES_CONNECTED`
            * :attr:`Tier1.ROUTE_ADVERTISEMENT_TYPES_NAT`
            * :attr:`Tier1.ROUTE_ADVERTISEMENT_TYPES_LB_VIP`
            * :attr:`Tier1.ROUTE_ADVERTISEMENT_TYPES_LB_SNAT`
            * :attr:`Tier1.ROUTE_ADVERTISEMENT_TYPES_DNS_FORWARDER_IP`
            * :attr:`Tier1.ROUTE_ADVERTISEMENT_TYPES_IPSEC_LOCAL_ENDPOINT`
            
            Enable different types of route advertisements. When not specified,
            routes to IPSec VPN local-endpoint subnets
            (TIER1_IPSEC_LOCAL_ENDPOINT) are automatically advertised.
        :type  tier0_path: :class:`str` or ``None``
        :param tier0_path: Specify Tier-1 connectivity to Tier-0 instance.
        :type  type: :class:`str` or ``None``
        :param type: Possible values are: 
            
            * :attr:`Tier1.TYPE_ROUTED`
            * :attr:`Tier1.TYPE_ISOLATED`
            * :attr:`Tier1.TYPE_NATTED`
            
            Tier1 connectivity type for reference. Property value is not
            validated with Tier1 configuration. ROUTED: Tier1 is connected to
            Tier0 gateway and routing is enabled. ISOLATED: Tier1 is not
            connected to any Tier0 gateway. NATTED: Tier1 is in ROUTED type
            with NAT configured locally.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.default_rule_logging = default_rule_logging
        self.dhcp_config_paths = dhcp_config_paths
        self.disable_firewall = disable_firewall
        self.enable_standby_relocation = enable_standby_relocation
        self.failover_mode = failover_mode
        self.federation_config = federation_config
        self.force_whitelisting = force_whitelisting
        self.intersite_config = intersite_config
        self.ipv6_profile_paths = ipv6_profile_paths
        self.pool_allocation = pool_allocation
        self.qos_profile = qos_profile
        self.route_advertisement_rules = route_advertisement_rules
        self.route_advertisement_types = route_advertisement_types
        self.tier0_path = tier0_path
        self.type = type
        VapiStruct.__init__(self)


Tier1._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.tier1', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'default_rule_logging': type.OptionalType(type.BooleanType()),
        'dhcp_config_paths': type.OptionalType(type.ListType(type.StringType())),
        'disable_firewall': type.OptionalType(type.BooleanType()),
        'enable_standby_relocation': type.OptionalType(type.BooleanType()),
        'failover_mode': type.OptionalType(type.StringType()),
        'federation_config': type.OptionalType(type.ReferenceType(__name__, 'FederationGatewayConfig')),
        'force_whitelisting': type.OptionalType(type.BooleanType()),
        'intersite_config': type.OptionalType(type.ReferenceType(__name__, 'IntersiteGatewayConfig')),
        'ipv6_profile_paths': type.OptionalType(type.ListType(type.StringType())),
        'pool_allocation': type.OptionalType(type.StringType()),
        'qos_profile': type.OptionalType(type.ReferenceType(__name__, 'GatewayQosProfileConfig')),
        'route_advertisement_rules': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'RouteAdvertisementRule'))),
        'route_advertisement_types': type.OptionalType(type.ListType(type.StringType())),
        'tier0_path': type.OptionalType(type.StringType()),
        'type': type.OptionalType(type.StringType()),
    },
    Tier1,
    False,
    None))



class Tier1DeploymentMap(VapiStruct):
    """
    Binding of Tier-1 to the enforcement point.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'enforcement_point': 'enforcement_point',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 enforcement_point=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  enforcement_point: :class:`str` or ``None``
        :param enforcement_point: Path of enforcement point on which Tier-1 shall be deployed.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.enforcement_point = enforcement_point
        VapiStruct.__init__(self)


Tier1DeploymentMap._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.tier1_deployment_map', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'enforcement_point': type.OptionalType(type.StringType()),
    },
    Tier1DeploymentMap,
    False,
    None))



class Tier1GatewayState(VapiStruct):
    """
    Tier1 gateway state

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'enforcement_point_path': 'enforcement_point_path',
                            'ipv6_status': 'ipv6_status',
                            'tier1_state': 'tier1_state',
                            'tier1_status': 'tier1_status',
                            }

    def __init__(self,
                 enforcement_point_path=None,
                 ipv6_status=None,
                 tier1_state=None,
                 tier1_status=None,
                ):
        """
        :type  enforcement_point_path: :class:`str` or ``None``
        :param enforcement_point_path: String Path of the enforcement point. When not specified, routes
            from all enforcement-points are returned.
        :type  ipv6_status: :class:`list` of :class:`IPv6Status` or ``None``
        :param ipv6_status: IPv6 DAD status for interfaces configured on Tier1
        :type  tier1_state: :class:`LogicalRouterState` or ``None``
        :param tier1_state: Detailed realized state information for Tier1
        :type  tier1_status: :class:`LogicalRouterStatus` or ``None``
        :param tier1_status: Detailed realized status information for Tier1
        """
        self.enforcement_point_path = enforcement_point_path
        self.ipv6_status = ipv6_status
        self.tier1_state = tier1_state
        self.tier1_status = tier1_status
        VapiStruct.__init__(self)


Tier1GatewayState._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.tier1_gateway_state', {
        'enforcement_point_path': type.OptionalType(type.StringType()),
        'ipv6_status': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'IPv6Status'))),
        'tier1_state': type.OptionalType(type.ReferenceType(__name__, 'LogicalRouterState')),
        'tier1_status': type.OptionalType(type.ReferenceType(__name__, 'LogicalRouterStatus')),
    },
    Tier1GatewayState,
    False,
    None))



class Tier1Interface(VapiStruct):
    """
    Tier-1 interface configuration for attaching services.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    URPF_MODE_NONE = "NONE"
    """


    """
    URPF_MODE_STRICT = "STRICT"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'subnets': 'subnets',
                            'ipv6_profile_paths': 'ipv6_profile_paths',
                            'mtu': 'mtu',
                            'segment_path': 'segment_path',
                            'urpf_mode': 'urpf_mode',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 subnets=None,
                 ipv6_profile_paths=None,
                 mtu=None,
                 segment_path=None,
                 urpf_mode=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  subnets: :class:`list` of :class:`InterfaceSubnet` or ``None``
        :param subnets: Specify IP address and network prefix for interface.
        :type  ipv6_profile_paths: :class:`list` of :class:`str` or ``None``
        :param ipv6_profile_paths: Configrue IPv6 NDRA profile. Only one NDRA profile can be
            configured.
        :type  mtu: :class:`long` or ``None``
        :param mtu: Maximum transmission unit (MTU) specifies the size of the largest
            packet that a network protocol can transmit. format: int32
        :type  segment_path: :class:`str` or ``None``
        :param segment_path: Policy path of Segment to which interface is connected to.
        :type  urpf_mode: :class:`str` or ``None``
        :param urpf_mode: Possible values are: 
            
            * :attr:`Tier1Interface.URPF_MODE_NONE`
            * :attr:`Tier1Interface.URPF_MODE_STRICT`
            
             Unicast Reverse Path Forwarding mode
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.subnets = subnets
        self.ipv6_profile_paths = ipv6_profile_paths
        self.mtu = mtu
        self.segment_path = segment_path
        self.urpf_mode = urpf_mode
        VapiStruct.__init__(self)


Tier1Interface._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.tier1_interface', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'subnets': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'InterfaceSubnet'))),
        'ipv6_profile_paths': type.OptionalType(type.ListType(type.StringType())),
        'mtu': type.OptionalType(type.IntegerType()),
        'segment_path': type.OptionalType(type.StringType()),
        'urpf_mode': type.OptionalType(type.StringType()),
    },
    Tier1Interface,
    False,
    None))



class Tier1InterfaceListResult(VapiStruct):
    """
    Paged collection of Tier-1 Interfaces

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`Tier1Interface` or ``None``
        :param results: Tier-1 Interface list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


Tier1InterfaceListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.tier1_interface_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tier1Interface'))),
    },
    Tier1InterfaceListResult,
    False,
    None))



class Tier1ListResult(VapiStruct):
    """
    Paged collection of Tier-1 instances

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`Tier1` or ``None``
        :param results: Tier-1 list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


Tier1ListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.tier1_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tier1'))),
    },
    Tier1ListResult,
    False,
    None))



class TlsCertificate(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'details': 'details',
                            'pem_encoded': 'pem_encoded',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 details=None,
                 pem_encoded=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  details: :class:`list` of :class:`X509Certificate` or ``None``
        :param details: list of X509Certificates.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  pem_encoded: :class:`str` or ``None``
        :param pem_encoded: pem encoded certificate data.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.details = details
        self.pem_encoded = pem_encoded
        VapiStruct.__init__(self)


TlsCertificate._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.tls_certificate', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'details': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'X509Certificate'))),
        'pem_encoded': type.OptionalType(type.StringType()),
    },
    TlsCertificate,
    False,
    None))



class TlsCertificateList(VapiStruct):
    """
    Certificate queries result

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`TlsCertificate` or ``None``
        :param results: TlsCertificate list.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


TlsCertificateList._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.tls_certificate_list', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'TlsCertificate'))),
    },
    TlsCertificateList,
    False,
    None))



class TlsCrl(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'details': 'details',
                            'pem_encoded': 'pem_encoded',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 details=None,
                 pem_encoded=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  details: :class:`X509Crl` or ``None``
        :param details: Details of the X509Crl object.
        :type  pem_encoded: :class:`str` or ``None``
        :param pem_encoded: Pem encoded crl data.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.details = details
        self.pem_encoded = pem_encoded
        VapiStruct.__init__(self)


TlsCrl._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.tls_crl', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'details': type.OptionalType(type.ReferenceType(__name__, 'X509Crl')),
        'pem_encoded': type.OptionalType(type.StringType()),
    },
    TlsCrl,
    False,
    None))



class TlsCrlListResult(VapiStruct):
    """
    Paged Collection of TlsCrl

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`TlsCrl` or ``None``
        :param results: TlsCrl list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


TlsCrlListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.tls_crl_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'TlsCrl'))),
    },
    TlsCrlListResult,
    False,
    None))



class TlsListenerCertificate(VapiStruct):
    """
    Returns the certificate and thumbprint of a remote TLS listener, if the
    listener is running and accepting requests. If the certificate cannot be
    retrieved, the result property describes the problem.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    RESULT_SUCCESS = "SUCCESS"
    """


    """
    RESULT_CONNECTION_TIMEOUT = "CONNECTION_TIMEOUT"
    """


    """
    RESULT_NO_ROUTE_TO_HOST = "NO_ROUTE_TO_HOST"
    """


    """
    RESULT_CONNECTION_REFUSED = "CONNECTION_REFUSED"
    """


    """



    _canonical_to_pep_names = {
                            'certificate': 'certificate',
                            'result': 'result',
                            'thumbprint': 'thumbprint',
                            }

    def __init__(self,
                 certificate=None,
                 result=None,
                 thumbprint=None,
                ):
        """
        :type  certificate: :class:`X509Certificate` or ``None``
        :param certificate: The certificate of the TLS listener.
        :type  result: :class:`str` or ``None``
        :param result: Possible values are: 
            
            * :attr:`TlsListenerCertificate.RESULT_SUCCESS`
            * :attr:`TlsListenerCertificate.RESULT_CONNECTION_TIMEOUT`
            * :attr:`TlsListenerCertificate.RESULT_NO_ROUTE_TO_HOST`
            * :attr:`TlsListenerCertificate.RESULT_CONNECTION_REFUSED`
            
             Result of get certificate operation.
        :type  thumbprint: :class:`str` or ``None``
        :param thumbprint: The SHA-256 thumbprint of the TLS listener.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.certificate = certificate
        self.result = result
        self.thumbprint = thumbprint
        VapiStruct.__init__(self)


TlsListenerCertificate._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.tls_listener_certificate', {
        'certificate': type.OptionalType(type.ReferenceType(__name__, 'X509Certificate')),
        'result': type.OptionalType(type.StringType()),
        'thumbprint': type.OptionalType(type.StringType()),
    },
    TlsListenerCertificate,
    False,
    None))



class TlsTrustData(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'key_algo': 'key_algo',
                            'passphrase': 'passphrase',
                            'pem_encoded': 'pem_encoded',
                            'private_key': 'private_key',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 key_algo=None,
                 passphrase=None,
                 pem_encoded=None,
                 private_key=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  key_algo: :class:`str` or ``None``
        :param key_algo: Key algorithm contained in this certificate.
        :type  passphrase: :class:`str` or ``None``
        :param passphrase: Password for private key encryption.
        :type  pem_encoded: :class:`str` or ``None``
        :param pem_encoded: pem encoded certificate data.
        :type  private_key: :class:`str` or ``None``
        :param private_key: private key data
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.key_algo = key_algo
        self.passphrase = passphrase
        self.pem_encoded = pem_encoded
        self.private_key = private_key
        VapiStruct.__init__(self)


TlsTrustData._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.tls_trust_data', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'key_algo': type.OptionalType(type.StringType()),
        'passphrase': type.OptionalType(type.StringType()),
        'pem_encoded': type.OptionalType(type.StringType()),
        'private_key': type.OptionalType(type.StringType()),
    },
    TlsTrustData,
    False,
    None))



class Tooltip(VapiStruct):
    """
    Tooltip to be shown while hovering over the dashboard UI element.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'condition': 'condition',
                            'heading': 'heading',
                            'text': 'text',
                            }

    def __init__(self,
                 condition=None,
                 heading=None,
                 text=None,
                ):
        """
        :type  condition: :class:`str` or ``None``
        :param condition: If the condition is met then the tooltip will be applied. If no
            condition is provided, then the tooltip will be applied
            unconditionally. Examples of expression syntax are provided under
            'example_request' section of 'CreateWidgetConfiguration' API.
        :type  heading: :class:`bool` or ``None``
        :param heading: If true, displays tooltip text in bold
        :type  text: :class:`str` or ``None``
        :param text: Text to be shown on tooltip while hovering over UI element. The
            text would be wrapped if it exceeds 80 chars.
        """
        self.condition = condition
        self.heading = heading
        self.text = text
        VapiStruct.__init__(self)


Tooltip._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.tooltip', {
        'condition': type.OptionalType(type.StringType()),
        'heading': type.OptionalType(type.BooleanType()),
        'text': type.OptionalType(type.StringType()),
    },
    Tooltip,
    False,
    None))



class Traceflow(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    OPERATION_STATE_IN_PROGRESS = "IN_PROGRESS"
    """


    """
    OPERATION_STATE_FINISHED = "FINISHED"
    """


    """
    OPERATION_STATE_FAILED = "FAILED"
    """


    """
    REQUEST_STATUS_SUCCESS = "SUCCESS"
    """


    """
    REQUEST_STATUS_TIMEOUT = "TIMEOUT"
    """


    """
    REQUEST_STATUS_SOURCE_PORT_NOT_FOUND = "SOURCE_PORT_NOT_FOUND"
    """


    """
    REQUEST_STATUS_DATA_PATH_NOT_READY = "DATA_PATH_NOT_READY"
    """


    """
    REQUEST_STATUS_CONNECTION_ERROR = "CONNECTION_ERROR"
    """


    """
    REQUEST_STATUS_UNKNOWN = "UNKNOWN"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'analysis': 'analysis',
                            'counters': 'counters',
                            'logical_counters': 'logical_counters',
                            'lport_id': 'lport_id',
                            'operation_state': 'operation_state',
                            'request_status': 'request_status',
                            'result_overflowed': 'result_overflowed',
                            'timeout': 'timeout',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 analysis=None,
                 counters=None,
                 logical_counters=None,
                 lport_id=None,
                 operation_state=None,
                 request_status=None,
                 result_overflowed=None,
                 timeout=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: The id of the traceflow round
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  analysis: :class:`list` of :class:`str` or ``None``
        :param analysis: Traceflow result analysis notes
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  counters: :class:`TraceflowObservationCounters` or ``None``
        :param counters: observation counters
        :type  logical_counters: :class:`TraceflowObservationCounters` or ``None``
        :param logical_counters: counters of observations from logical components
        :type  lport_id: :class:`str` or ``None``
        :param lport_id: id of the source logical port used for injecting the traceflow
            packet
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  operation_state: :class:`str` or ``None``
        :param operation_state: Possible values are: 
            
            * :attr:`Traceflow.OPERATION_STATE_IN_PROGRESS`
            * :attr:`Traceflow.OPERATION_STATE_FINISHED`
            * :attr:`Traceflow.OPERATION_STATE_FAILED`
            
             Represents the traceflow operation state
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  request_status: :class:`str` or ``None``
        :param request_status: Possible values are: 
            
            * :attr:`Traceflow.REQUEST_STATUS_SUCCESS`
            * :attr:`Traceflow.REQUEST_STATUS_TIMEOUT`
            * :attr:`Traceflow.REQUEST_STATUS_SOURCE_PORT_NOT_FOUND`
            * :attr:`Traceflow.REQUEST_STATUS_DATA_PATH_NOT_READY`
            * :attr:`Traceflow.REQUEST_STATUS_CONNECTION_ERROR`
            * :attr:`Traceflow.REQUEST_STATUS_UNKNOWN`
            
            The status of the traceflow RPC request. SUCCESS - The traceflow
            request is sent successfully. TIMEOUT - The traceflow request gets
            timeout. SOURCE_PORT_NOT_FOUND - The source port of the request
            cannot be found. DATA_PATH_NOT_READY - The datapath component
            cannot be ready to receive request. CONNECTION_ERROR - There is
            connection error on datapath component. UNKNOWN - The status of
            traceflow request cannot be determined.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_overflowed: :class:`bool` or ``None``
        :param result_overflowed: A flag, when set true, indicates some observations were deleted
            from the result set.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  timeout: :class:`long` or ``None``
        :param timeout: Maximum time (in ms) the management plane will be waiting for this
            traceflow round. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.analysis = analysis
        self.counters = counters
        self.logical_counters = logical_counters
        self.lport_id = lport_id
        self.operation_state = operation_state
        self.request_status = request_status
        self.result_overflowed = result_overflowed
        self.timeout = timeout
        VapiStruct.__init__(self)


Traceflow._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.traceflow', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'analysis': type.OptionalType(type.ListType(type.StringType())),
        'counters': type.OptionalType(type.ReferenceType(__name__, 'TraceflowObservationCounters')),
        'logical_counters': type.OptionalType(type.ReferenceType(__name__, 'TraceflowObservationCounters')),
        'lport_id': type.OptionalType(type.StringType()),
        'operation_state': type.OptionalType(type.StringType()),
        'request_status': type.OptionalType(type.StringType()),
        'result_overflowed': type.OptionalType(type.BooleanType()),
        'timeout': type.OptionalType(type.IntegerType()),
    },
    Traceflow,
    False,
    None))



class TraceflowConfig(VapiStruct):
    """
    Traceflow configuration

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'is_transient': 'is_transient',
                            'packet': 'packet',
                            'segment_port_path': 'segment_port_path',
                            'timeout': 'timeout',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 is_transient=None,
                 packet=None,
                 segment_port_path=None,
                 timeout=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  is_transient: :class:`bool` or ``None``
        :param is_transient: This field indicates if intent is transient and will be cleaned up
            by the system if set to true
        :type  packet: :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param packet: Configuration of packet data
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`PacketData`. When methods return a value of this class as a
            return value, the attribute will contain all the attributes defined
            in :class:`PacketData`.
        :type  segment_port_path: :class:`str` or ``None``
        :param segment_port_path: Segment Port Path or UUID
        :type  timeout: :class:`long` or ``None``
        :param timeout: Maximum time in seconds the management plane will wait for
            observation result to be sent by opsAgent. format: int64
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.is_transient = is_transient
        self.packet = packet
        self.segment_port_path = segment_port_path
        self.timeout = timeout
        VapiStruct.__init__(self)


TraceflowConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.traceflow_config', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'is_transient': type.OptionalType(type.BooleanType()),
        'packet': type.OptionalType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'PacketData')])),
        'segment_port_path': type.OptionalType(type.StringType()),
        'timeout': type.OptionalType(type.IntegerType()),
    },
    TraceflowConfig,
    False,
    None))



class TraceflowConfigListResult(VapiStruct):
    """
    Paged Collection of TraceflowConfigs

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`TraceflowConfig` or ``None``
        :param results: TraceflowConfig list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


TraceflowConfigListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.traceflow_config_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'TraceflowConfig'))),
    },
    TraceflowConfigListResult,
    False,
    None))



class TraceflowObservation(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "TraceflowObservation"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    COMPONENT_SUB_TYPE_LR_TIER0 = "LR_TIER0"
    """


    """
    COMPONENT_SUB_TYPE_LR_TIER1 = "LR_TIER1"
    """


    """
    COMPONENT_SUB_TYPE_LR_VRF_TIER0 = "LR_VRF_TIER0"
    """


    """
    COMPONENT_SUB_TYPE_LS_TRANSIT = "LS_TRANSIT"
    """


    """
    COMPONENT_SUB_TYPE_SI_CLASSIFIER = "SI_CLASSIFIER"
    """


    """
    COMPONENT_SUB_TYPE_SI_PROXY = "SI_PROXY"
    """


    """
    COMPONENT_SUB_TYPE_VDR = "VDR"
    """


    """
    COMPONENT_SUB_TYPE_ENI = "ENI"
    """


    """
    COMPONENT_SUB_TYPE_AWS_GATEWAY = "AWS_GATEWAY"
    """


    """
    COMPONENT_SUB_TYPE_TGW_ROUTE = "TGW_ROUTE"
    """


    """
    COMPONENT_SUB_TYPE_EDGE_UPLINK = "EDGE_UPLINK"
    """


    """
    COMPONENT_SUB_TYPE_DELL_GATEWAY = "DELL_GATEWAY"
    """


    """
    COMPONENT_SUB_TYPE_UNKNOWN = "UNKNOWN"
    """


    """
    COMPONENT_TYPE_PHYSICAL = "PHYSICAL"
    """


    """
    COMPONENT_TYPE_LR = "LR"
    """


    """
    COMPONENT_TYPE_LS = "LS"
    """


    """
    COMPONENT_TYPE_DFW = "DFW"
    """


    """
    COMPONENT_TYPE_BRIDGE = "BRIDGE"
    """


    """
    COMPONENT_TYPE_EDGE_TUNNEL = "EDGE_TUNNEL"
    """


    """
    COMPONENT_TYPE_EDGE_HOSTSWITCH = "EDGE_HOSTSWITCH"
    """


    """
    COMPONENT_TYPE_FW_BRIDGE = "FW_BRIDGE"
    """


    """
    COMPONENT_TYPE_LOAD_BALANCER = "LOAD_BALANCER"
    """


    """
    COMPONENT_TYPE_NAT = "NAT"
    """


    """
    COMPONENT_TYPE_IPSEC = "IPSEC"
    """


    """
    COMPONENT_TYPE_SERVICE_INSERTION = "SERVICE_INSERTION"
    """


    """
    COMPONENT_TYPE_VMC = "VMC"
    """


    """
    COMPONENT_TYPE_SPOOFGUARD = "SPOOFGUARD"
    """


    """
    COMPONENT_TYPE_EDGE_FW = "EDGE_FW"
    """


    """
    COMPONENT_TYPE_UNKNOWN = "UNKNOWN"
    """


    """
    RESOURCE_TYPE_TRACEFLOWOBSERVATIONFORWARDED = "TraceflowObservationForwarded"
    """


    """
    RESOURCE_TYPE_TRACEFLOWOBSERVATIONDROPPED = "TraceflowObservationDropped"
    """


    """
    RESOURCE_TYPE_TRACEFLOWOBSERVATIONDELIVERED = "TraceflowObservationDelivered"
    """


    """
    RESOURCE_TYPE_TRACEFLOWOBSERVATIONRECEIVED = "TraceflowObservationReceived"
    """


    """
    RESOURCE_TYPE_TRACEFLOWOBSERVATIONFORWARDEDLOGICAL = "TraceflowObservationForwardedLogical"
    """


    """
    RESOURCE_TYPE_TRACEFLOWOBSERVATIONDROPPEDLOGICAL = "TraceflowObservationDroppedLogical"
    """


    """
    RESOURCE_TYPE_TRACEFLOWOBSERVATIONRECEIVEDLOGICAL = "TraceflowObservationReceivedLogical"
    """


    """
    RESOURCE_TYPE_TRACEFLOWOBSERVATIONREPLICATIONLOGICAL = "TraceflowObservationReplicationLogical"
    """


    """
    RESOURCE_TYPE_TRACEFLOWOBSERVATIONRELAYEDLOGICAL = "TraceflowObservationRelayedLogical"
    """


    """
    TRANSPORT_NODE_TYPE_ESX = "ESX"
    """


    """
    TRANSPORT_NODE_TYPE_RHELKVM = "RHELKVM"
    """


    """
    TRANSPORT_NODE_TYPE_UBUNTUKVM = "UBUNTUKVM"
    """


    """
    TRANSPORT_NODE_TYPE_EDGE = "EDGE"
    """


    """
    TRANSPORT_NODE_TYPE_PUBLIC_CLOUD_GATEWAY_NODE = "PUBLIC_CLOUD_GATEWAY_NODE"
    """


    """
    TRANSPORT_NODE_TYPE_OTHERS = "OTHERS"
    """


    """
    TRANSPORT_NODE_TYPE_HYPERV = "HYPERV"
    """


    """



    _canonical_to_pep_names = {
                            'component_name': 'component_name',
                            'component_sub_type': 'component_sub_type',
                            'component_type': 'component_type',
                            'resource_type': 'resource_type',
                            'sequence_no': 'sequence_no',
                            'timestamp': 'timestamp',
                            'timestamp_micro': 'timestamp_micro',
                            'transport_node_id': 'transport_node_id',
                            'transport_node_name': 'transport_node_name',
                            'transport_node_type': 'transport_node_type',
                            }

    def __init__(self,
                 component_name=None,
                 component_sub_type=None,
                 component_type=None,
                 resource_type='TraceflowObservation',
                 sequence_no=None,
                 timestamp=None,
                 timestamp_micro=None,
                 transport_node_id=None,
                 transport_node_name=None,
                 transport_node_type=None,
                ):
        """
        :type  component_name: :class:`str` or ``None``
        :param component_name: The name of the component that issued the observation.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  component_sub_type: :class:`str` or ``None``
        :param component_sub_type: Possible values are: 
            
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_LR_TIER0`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_LR_TIER1`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_LR_VRF_TIER0`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_LS_TRANSIT`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_SI_CLASSIFIER`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_SI_PROXY`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_VDR`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_ENI`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_AWS_GATEWAY`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_TGW_ROUTE`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_EDGE_UPLINK`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_DELL_GATEWAY`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_UNKNOWN`
            
             The sub type of the component that issued the observation.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  component_type: :class:`str` or ``None``
        :param component_type: Possible values are: 
            
            * :attr:`TraceflowObservation.COMPONENT_TYPE_PHYSICAL`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_LR`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_LS`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_DFW`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_BRIDGE`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_EDGE_TUNNEL`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_EDGE_HOSTSWITCH`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_FW_BRIDGE`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_LOAD_BALANCER`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_NAT`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_IPSEC`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_SERVICE_INSERTION`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_VMC`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_SPOOFGUARD`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_EDGE_FW`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_UNKNOWN`
            
             The type of the component that issued the observation.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONFORWARDED`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONDROPPED`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONDELIVERED`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONRECEIVED`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONFORWARDEDLOGICAL`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONDROPPEDLOGICAL`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONRECEIVEDLOGICAL`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONREPLICATIONLOGICAL`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONRELAYEDLOGICAL`
        :type  sequence_no: :class:`long` or ``None``
        :param sequence_no: the hop count for observations on the transport node that a
            traceflow packet is injected in will be 0. The hop count is
            incremented each time a subsequent transport node receives the
            traceflow packet. The sequence number of 999 indicates that the hop
            count could not be determined for the containing observation.
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  timestamp: :class:`long` or ``None``
        :param timestamp: Timestamp when the observation was created by the transport node
            (milliseconds epoch) format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  timestamp_micro: :class:`long` or ``None``
        :param timestamp_micro: Timestamp when the observation was created by the transport node
            (microseconds epoch) format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  transport_node_id: :class:`str` or ``None``
        :param transport_node_id: id of the transport node that observed a traceflow packet
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  transport_node_name: :class:`str` or ``None``
        :param transport_node_name: name of the transport node that observed a traceflow packet
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  transport_node_type: :class:`str` or ``None``
        :param transport_node_type: Possible values are: 
            
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_ESX`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_RHELKVM`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_UBUNTUKVM`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_EDGE`
            *
              :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_PUBLIC_CLOUD_GATEWAY_NODE`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_OTHERS`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_HYPERV`
            
             type of the transport node that observed a traceflow packet
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.component_name = component_name
        self.component_sub_type = component_sub_type
        self.component_type = component_type
        self._resource_type = resource_type
        self.sequence_no = sequence_no
        self.timestamp = timestamp
        self.timestamp_micro = timestamp_micro
        self.transport_node_id = transport_node_id
        self.transport_node_name = transport_node_name
        self.transport_node_type = transport_node_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

TraceflowObservation._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.traceflow_observation', {
        'component_name': type.OptionalType(type.StringType()),
        'component_sub_type': type.OptionalType(type.StringType()),
        'component_type': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'sequence_no': type.OptionalType(type.IntegerType()),
        'timestamp': type.OptionalType(type.IntegerType()),
        'timestamp_micro': type.OptionalType(type.IntegerType()),
        'transport_node_id': type.OptionalType(type.StringType()),
        'transport_node_name': type.OptionalType(type.StringType()),
        'transport_node_type': type.OptionalType(type.StringType()),
    },
    TraceflowObservation,
    False,
    None))



class TraceflowObservationCounters(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'delivered_count': 'delivered_count',
                            'dropped_count': 'dropped_count',
                            'forwarded_count': 'forwarded_count',
                            'received_count': 'received_count',
                            }

    def __init__(self,
                 delivered_count=None,
                 dropped_count=None,
                 forwarded_count=None,
                 received_count=None,
                ):
        """
        :type  delivered_count: :class:`long` or ``None``
        :param delivered_count: Total number of delivered observations for this traceflow round.
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  dropped_count: :class:`long` or ``None``
        :param dropped_count: Total number of dropped observations for this round. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  forwarded_count: :class:`long` or ``None``
        :param forwarded_count: Total number of forwarded observations for this traceflow round.
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  received_count: :class:`long` or ``None``
        :param received_count: Total number of received observations for this traceflow round.
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.delivered_count = delivered_count
        self.dropped_count = dropped_count
        self.forwarded_count = forwarded_count
        self.received_count = received_count
        VapiStruct.__init__(self)


TraceflowObservationCounters._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.traceflow_observation_counters', {
        'delivered_count': type.OptionalType(type.IntegerType()),
        'dropped_count': type.OptionalType(type.IntegerType()),
        'forwarded_count': type.OptionalType(type.IntegerType()),
        'received_count': type.OptionalType(type.IntegerType()),
    },
    TraceflowObservationCounters,
    False,
    None))



class TraceflowObservationDelivered(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "TraceflowObservationDelivered"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    RESOLUTION_TYPE_UNKNOWN = "UNKNOWN"
    """


    """
    RESOLUTION_TYPE_ARP_SUPPRESSION_PORT_CACHE = "ARP_SUPPRESSION_PORT_CACHE"
    """


    """
    RESOLUTION_TYPE_ARP_SUPPRESSION_TABLE = "ARP_SUPPRESSION_TABLE"
    """


    """
    RESOLUTION_TYPE_ARP_SUPPRESSION_CP_QUERY = "ARP_SUPPRESSION_CP_QUERY"
    """


    """
    RESOLUTION_TYPE_ARP_VM = "ARP_VM"
    """


    """



    _canonical_to_pep_names = {
                            'lport_id': 'lport_id',
                            'lport_name': 'lport_name',
                            'resolution_type': 'resolution_type',
                            'target_mac': 'target_mac',
                            'vlan_id': 'vlan_id',
                            'component_name': 'component_name',
                            'component_sub_type': 'component_sub_type',
                            'component_type': 'component_type',
                            'resource_type': 'resource_type',
                            'sequence_no': 'sequence_no',
                            'timestamp': 'timestamp',
                            'timestamp_micro': 'timestamp_micro',
                            'transport_node_id': 'transport_node_id',
                            'transport_node_name': 'transport_node_name',
                            'transport_node_type': 'transport_node_type',
                            }

    def __init__(self,
                 lport_id=None,
                 lport_name=None,
                 resolution_type=None,
                 target_mac=None,
                 vlan_id=None,
                 component_name=None,
                 component_sub_type=None,
                 component_type=None,
                 resource_type='TraceflowObservationDelivered',
                 sequence_no=None,
                 timestamp=None,
                 timestamp_micro=None,
                 transport_node_id=None,
                 transport_node_name=None,
                 transport_node_type=None,
                ):
        """
        :type  lport_id: :class:`str` or ``None``
        :param lport_id: The id of the logical port into which the traceflow packet was
            delivered
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  lport_name: :class:`str` or ``None``
        :param lport_name: The name of the logical port into which the traceflow packet was
            delivered
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  resolution_type: :class:`str` or ``None``
        :param resolution_type: Possible values are: 
            
            * :attr:`TraceflowObservationDelivered.RESOLUTION_TYPE_UNKNOWN`
            *
              :attr:`TraceflowObservationDelivered.RESOLUTION_TYPE_ARP_SUPPRESSION_PORT_CACHE`
            *
              :attr:`TraceflowObservationDelivered.RESOLUTION_TYPE_ARP_SUPPRESSION_TABLE`
            *
              :attr:`TraceflowObservationDelivered.RESOLUTION_TYPE_ARP_SUPPRESSION_CP_QUERY`
            * :attr:`TraceflowObservationDelivered.RESOLUTION_TYPE_ARP_VM`
            
            This field specifies the resolution type of ARP
            ARP_SUPPRESSION_PORT_CACHE - ARP request is suppressed by port DB
            ARP_SUPPRESSION_TABLE - ARP request is suppressed by ARP table
            ARP_SUPPRESSION_CP_QUERY - ARP request is suppressed by info
            derived from CP ARP_VM - No suppression and the ARP request is
            resolved.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  target_mac: :class:`str` or ``None``
        :param target_mac: The source MAC address of form:
            \"^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$\". For example:
            00:00:00:00:00:00.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  vlan_id: :class:`long` or ``None``
        :param vlan_id: VLAN on bridged network format: int64
        :type  component_name: :class:`str` or ``None``
        :param component_name: The name of the component that issued the observation.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  component_sub_type: :class:`str` or ``None``
        :param component_sub_type: Possible values are: 
            
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_LR_TIER0`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_LR_TIER1`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_LR_VRF_TIER0`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_LS_TRANSIT`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_SI_CLASSIFIER`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_SI_PROXY`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_VDR`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_ENI`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_AWS_GATEWAY`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_TGW_ROUTE`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_EDGE_UPLINK`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_DELL_GATEWAY`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_UNKNOWN`
            
             The sub type of the component that issued the observation.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  component_type: :class:`str` or ``None``
        :param component_type: Possible values are: 
            
            * :attr:`TraceflowObservation.COMPONENT_TYPE_PHYSICAL`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_LR`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_LS`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_DFW`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_BRIDGE`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_EDGE_TUNNEL`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_EDGE_HOSTSWITCH`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_FW_BRIDGE`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_LOAD_BALANCER`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_NAT`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_IPSEC`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_SERVICE_INSERTION`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_VMC`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_SPOOFGUARD`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_EDGE_FW`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_UNKNOWN`
            
             The type of the component that issued the observation.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONFORWARDED`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONDROPPED`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONDELIVERED`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONRECEIVED`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONFORWARDEDLOGICAL`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONDROPPEDLOGICAL`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONRECEIVEDLOGICAL`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONREPLICATIONLOGICAL`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONRELAYEDLOGICAL`
        :type  sequence_no: :class:`long` or ``None``
        :param sequence_no: the hop count for observations on the transport node that a
            traceflow packet is injected in will be 0. The hop count is
            incremented each time a subsequent transport node receives the
            traceflow packet. The sequence number of 999 indicates that the hop
            count could not be determined for the containing observation.
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  timestamp: :class:`long` or ``None``
        :param timestamp: Timestamp when the observation was created by the transport node
            (milliseconds epoch) format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  timestamp_micro: :class:`long` or ``None``
        :param timestamp_micro: Timestamp when the observation was created by the transport node
            (microseconds epoch) format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  transport_node_id: :class:`str` or ``None``
        :param transport_node_id: id of the transport node that observed a traceflow packet
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  transport_node_name: :class:`str` or ``None``
        :param transport_node_name: name of the transport node that observed a traceflow packet
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  transport_node_type: :class:`str` or ``None``
        :param transport_node_type: Possible values are: 
            
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_ESX`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_RHELKVM`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_UBUNTUKVM`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_EDGE`
            *
              :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_PUBLIC_CLOUD_GATEWAY_NODE`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_OTHERS`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_HYPERV`
            
             type of the transport node that observed a traceflow packet
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.lport_id = lport_id
        self.lport_name = lport_name
        self.resolution_type = resolution_type
        self.target_mac = target_mac
        self.vlan_id = vlan_id
        self.component_name = component_name
        self.component_sub_type = component_sub_type
        self.component_type = component_type
        self._resource_type = resource_type
        self.sequence_no = sequence_no
        self.timestamp = timestamp
        self.timestamp_micro = timestamp_micro
        self.transport_node_id = transport_node_id
        self.transport_node_name = transport_node_name
        self.transport_node_type = transport_node_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

TraceflowObservationDelivered._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.traceflow_observation_delivered', {
        'lport_id': type.OptionalType(type.StringType()),
        'lport_name': type.OptionalType(type.StringType()),
        'resolution_type': type.OptionalType(type.StringType()),
        'target_mac': type.OptionalType(type.StringType()),
        'vlan_id': type.OptionalType(type.IntegerType()),
        'component_name': type.OptionalType(type.StringType()),
        'component_sub_type': type.OptionalType(type.StringType()),
        'component_type': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'sequence_no': type.OptionalType(type.IntegerType()),
        'timestamp': type.OptionalType(type.IntegerType()),
        'timestamp_micro': type.OptionalType(type.IntegerType()),
        'transport_node_id': type.OptionalType(type.StringType()),
        'transport_node_name': type.OptionalType(type.StringType()),
        'transport_node_type': type.OptionalType(type.StringType()),
    },
    TraceflowObservationDelivered,
    False,
    None))



class TraceflowObservationDropped(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "TraceflowObservationDropped"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    ARP_FAIL_REASON_UNKNOWN = "ARP_UNKNOWN"
    """


    """
    ARP_FAIL_REASON_TIMEOUT = "ARP_TIMEOUT"
    """


    """
    ARP_FAIL_REASON_CPFAIL = "ARP_CPFAIL"
    """


    """
    ARP_FAIL_REASON_FROMCP = "ARP_FROMCP"
    """


    """
    ARP_FAIL_REASON_PORTDESTROY = "ARP_PORTDESTROY"
    """


    """
    ARP_FAIL_REASON_TABLEDESTROY = "ARP_TABLEDESTROY"
    """


    """
    ARP_FAIL_REASON_NETDESTROY = "ARP_NETDESTROY"
    """


    """
    REASON_ARP_FAIL = "ARP_FAIL"
    """


    """
    REASON_BFD = "BFD"
    """


    """
    REASON_DHCP = "DHCP"
    """


    """
    REASON_FW_RULE = "FW_RULE"
    """


    """
    REASON_GENEVE = "GENEVE"
    """


    """
    REASON_GRE = "GRE"
    """


    """
    REASON_IFACE = "IFACE"
    """


    """
    REASON_IP = "IP"
    """


    """
    REASON_IP_REASS = "IP_REASS"
    """


    """
    REASON_IPSEC = "IPSEC"
    """


    """
    REASON_IPSEC_VTI = "IPSEC_VTI"
    """


    """
    REASON_L2VPN = "L2VPN"
    """


    """
    REASON_L4PORT = "L4PORT"
    """


    """
    REASON_LB = "LB"
    """


    """
    REASON_LROUTER = "LROUTER"
    """


    """
    REASON_LSERVICE = "LSERVICE"
    """


    """
    REASON_LSWITCH = "LSWITCH"
    """


    """
    REASON_MD_PROXY = "MD_PROXY"
    """


    """
    REASON_NAT = "NAT"
    """


    """
    REASON_ND_NS_FAIL = "ND_NS_FAIL"
    """


    """
    REASON_NEIGH = "NEIGH"
    """


    """
    REASON_NO_EIP_FOUND = "NO_EIP_FOUND"
    """


    """
    REASON_NO_EIP_ASSOCIATION = "NO_EIP_ASSOCIATION"
    """


    """
    REASON_NO_ENI_FOR_IP = "NO_ENI_FOR_IP"
    """


    """
    REASON_NO_ENI_FOR_LIF = "NO_ENI_FOR_LIF"
    """


    """
    REASON_NO_ROUTE = "NO_ROUTE"
    """


    """
    REASON_NO_ROUTE_TABLE_FOUND = "NO_ROUTE_TABLE_FOUND"
    """


    """
    REASON_NO_UNDERLAY_ROUTE_FOUND = "NO_UNDERLAY_ROUTE_FOUND"
    """


    """
    REASON_NOT_VDR_DOWNLINK_ = "NOT_VDR_DOWNLINK,"
    """


    """
    REASON_NO_VDR_FOUND = "NO_VDR_FOUND"
    """


    """
    REASON_NO_VDR_ON_HOST = "NO_VDR_ON_HOST"
    """


    """
    REASON_NOT_VDR_UPLINK_ = "NOT_VDR_UPLINK,"
    """


    """
    REASON_SERVICE_INSERT = "SERVICE_INSERT"
    """


    """
    REASON_SPOOFGUARD = "SPOOFGUARD"
    """


    """
    REASON_TTL_ZERO = "TTL_ZERO"
    """


    """
    REASON_TUNNEL = "TUNNEL"
    """


    """
    REASON_VXLAN = "VXLAN"
    """


    """
    REASON_VXSTT = "VXSTT"
    """


    """
    REASON_VMC_NO_RESPONSE = "VMC_NO_RESPONSE"
    """


    """
    REASON_WRONG_UPLINK = "WRONG_UPLINK"
    """


    """
    REASON_UNKNOWN = "UNKNOWN"
    """


    """



    _canonical_to_pep_names = {
                            'acl_rule_id': 'acl_rule_id',
                            'arp_fail_reason': 'arp_fail_reason',
                            'lport_id': 'lport_id',
                            'lport_name': 'lport_name',
                            'nat_rule_id': 'nat_rule_id',
                            'reason': 'reason',
                            'component_name': 'component_name',
                            'component_sub_type': 'component_sub_type',
                            'component_type': 'component_type',
                            'resource_type': 'resource_type',
                            'sequence_no': 'sequence_no',
                            'timestamp': 'timestamp',
                            'timestamp_micro': 'timestamp_micro',
                            'transport_node_id': 'transport_node_id',
                            'transport_node_name': 'transport_node_name',
                            'transport_node_type': 'transport_node_type',
                            }

    def __init__(self,
                 acl_rule_id=None,
                 arp_fail_reason=None,
                 lport_id=None,
                 lport_name=None,
                 nat_rule_id=None,
                 reason=None,
                 component_name=None,
                 component_sub_type=None,
                 component_type=None,
                 resource_type='TraceflowObservationDropped',
                 sequence_no=None,
                 timestamp=None,
                 timestamp_micro=None,
                 transport_node_id=None,
                 transport_node_name=None,
                 transport_node_type=None,
                ):
        """
        :type  acl_rule_id: :class:`long` or ``None``
        :param acl_rule_id: The id of the acl rule that was applied to drop the traceflow
            packet format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  arp_fail_reason: :class:`str` or ``None``
        :param arp_fail_reason: Possible values are: 
            
            * :attr:`TraceflowObservationDropped.ARP_FAIL_REASON_UNKNOWN`
            * :attr:`TraceflowObservationDropped.ARP_FAIL_REASON_TIMEOUT`
            * :attr:`TraceflowObservationDropped.ARP_FAIL_REASON_CPFAIL`
            * :attr:`TraceflowObservationDropped.ARP_FAIL_REASON_FROMCP`
            * :attr:`TraceflowObservationDropped.ARP_FAIL_REASON_PORTDESTROY`
            * :attr:`TraceflowObservationDropped.ARP_FAIL_REASON_TABLEDESTROY`
            * :attr:`TraceflowObservationDropped.ARP_FAIL_REASON_NETDESTROY`
            
            This field specifies the ARP fails reason ARP_TIMEOUT - ARP failure
            due to query control plane timeout ARP_CPFAIL - ARP failure due
            post ARP query message to control plane failure ARP_FROMCP - ARP
            failure due to deleting ARP entry from control plane
            ARP_PORTDESTROY - ARP failure due to port destruction
            ARP_TABLEDESTROY - ARP failure due to ARP table destruction
            ARP_NETDESTROY - ARP failure due to overlay network destruction
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  lport_id: :class:`str` or ``None``
        :param lport_id: The id of the logical port at which the traceflow packet was
            dropped
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  lport_name: :class:`str` or ``None``
        :param lport_name: The name of the logical port at which the traceflow packet was
            dropped
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  nat_rule_id: :class:`long` or ``None``
        :param nat_rule_id: The ID of the NAT rule that was applied to forward the traceflow
            packet format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  reason: :class:`str` or ``None``
        :param reason: Possible values are: 
            
            * :attr:`TraceflowObservationDropped.REASON_ARP_FAIL`
            * :attr:`TraceflowObservationDropped.REASON_BFD`
            * :attr:`TraceflowObservationDropped.REASON_DHCP`
            * :attr:`TraceflowObservationDropped.REASON_FW_RULE`
            * :attr:`TraceflowObservationDropped.REASON_GENEVE`
            * :attr:`TraceflowObservationDropped.REASON_GRE`
            * :attr:`TraceflowObservationDropped.REASON_IFACE`
            * :attr:`TraceflowObservationDropped.REASON_IP`
            * :attr:`TraceflowObservationDropped.REASON_IP_REASS`
            * :attr:`TraceflowObservationDropped.REASON_IPSEC`
            * :attr:`TraceflowObservationDropped.REASON_IPSEC_VTI`
            * :attr:`TraceflowObservationDropped.REASON_L2VPN`
            * :attr:`TraceflowObservationDropped.REASON_L4PORT`
            * :attr:`TraceflowObservationDropped.REASON_LB`
            * :attr:`TraceflowObservationDropped.REASON_LROUTER`
            * :attr:`TraceflowObservationDropped.REASON_LSERVICE`
            * :attr:`TraceflowObservationDropped.REASON_LSWITCH`
            * :attr:`TraceflowObservationDropped.REASON_MD_PROXY`
            * :attr:`TraceflowObservationDropped.REASON_NAT`
            * :attr:`TraceflowObservationDropped.REASON_ND_NS_FAIL`
            * :attr:`TraceflowObservationDropped.REASON_NEIGH`
            * :attr:`TraceflowObservationDropped.REASON_NO_EIP_FOUND`
            * :attr:`TraceflowObservationDropped.REASON_NO_EIP_ASSOCIATION`
            * :attr:`TraceflowObservationDropped.REASON_NO_ENI_FOR_IP`
            * :attr:`TraceflowObservationDropped.REASON_NO_ENI_FOR_LIF`
            * :attr:`TraceflowObservationDropped.REASON_NO_ROUTE`
            * :attr:`TraceflowObservationDropped.REASON_NO_ROUTE_TABLE_FOUND`
            *
              :attr:`TraceflowObservationDropped.REASON_NO_UNDERLAY_ROUTE_FOUND`
            * :attr:`TraceflowObservationDropped.REASON_NOT_VDR_DOWNLINK_`
            * :attr:`TraceflowObservationDropped.REASON_NO_VDR_FOUND`
            * :attr:`TraceflowObservationDropped.REASON_NO_VDR_ON_HOST`
            * :attr:`TraceflowObservationDropped.REASON_NOT_VDR_UPLINK_`
            * :attr:`TraceflowObservationDropped.REASON_SERVICE_INSERT`
            * :attr:`TraceflowObservationDropped.REASON_SPOOFGUARD`
            * :attr:`TraceflowObservationDropped.REASON_TTL_ZERO`
            * :attr:`TraceflowObservationDropped.REASON_TUNNEL`
            * :attr:`TraceflowObservationDropped.REASON_VXLAN`
            * :attr:`TraceflowObservationDropped.REASON_VXSTT`
            * :attr:`TraceflowObservationDropped.REASON_VMC_NO_RESPONSE`
            * :attr:`TraceflowObservationDropped.REASON_WRONG_UPLINK`
            * :attr:`TraceflowObservationDropped.REASON_UNKNOWN`
            
             The reason traceflow packet was dropped
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  component_name: :class:`str` or ``None``
        :param component_name: The name of the component that issued the observation.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  component_sub_type: :class:`str` or ``None``
        :param component_sub_type: Possible values are: 
            
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_LR_TIER0`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_LR_TIER1`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_LR_VRF_TIER0`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_LS_TRANSIT`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_SI_CLASSIFIER`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_SI_PROXY`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_VDR`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_ENI`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_AWS_GATEWAY`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_TGW_ROUTE`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_EDGE_UPLINK`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_DELL_GATEWAY`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_UNKNOWN`
            
             The sub type of the component that issued the observation.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  component_type: :class:`str` or ``None``
        :param component_type: Possible values are: 
            
            * :attr:`TraceflowObservation.COMPONENT_TYPE_PHYSICAL`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_LR`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_LS`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_DFW`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_BRIDGE`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_EDGE_TUNNEL`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_EDGE_HOSTSWITCH`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_FW_BRIDGE`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_LOAD_BALANCER`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_NAT`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_IPSEC`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_SERVICE_INSERTION`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_VMC`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_SPOOFGUARD`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_EDGE_FW`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_UNKNOWN`
            
             The type of the component that issued the observation.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONFORWARDED`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONDROPPED`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONDELIVERED`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONRECEIVED`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONFORWARDEDLOGICAL`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONDROPPEDLOGICAL`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONRECEIVEDLOGICAL`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONREPLICATIONLOGICAL`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONRELAYEDLOGICAL`
        :type  sequence_no: :class:`long` or ``None``
        :param sequence_no: the hop count for observations on the transport node that a
            traceflow packet is injected in will be 0. The hop count is
            incremented each time a subsequent transport node receives the
            traceflow packet. The sequence number of 999 indicates that the hop
            count could not be determined for the containing observation.
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  timestamp: :class:`long` or ``None``
        :param timestamp: Timestamp when the observation was created by the transport node
            (milliseconds epoch) format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  timestamp_micro: :class:`long` or ``None``
        :param timestamp_micro: Timestamp when the observation was created by the transport node
            (microseconds epoch) format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  transport_node_id: :class:`str` or ``None``
        :param transport_node_id: id of the transport node that observed a traceflow packet
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  transport_node_name: :class:`str` or ``None``
        :param transport_node_name: name of the transport node that observed a traceflow packet
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  transport_node_type: :class:`str` or ``None``
        :param transport_node_type: Possible values are: 
            
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_ESX`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_RHELKVM`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_UBUNTUKVM`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_EDGE`
            *
              :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_PUBLIC_CLOUD_GATEWAY_NODE`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_OTHERS`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_HYPERV`
            
             type of the transport node that observed a traceflow packet
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.acl_rule_id = acl_rule_id
        self.arp_fail_reason = arp_fail_reason
        self.lport_id = lport_id
        self.lport_name = lport_name
        self.nat_rule_id = nat_rule_id
        self.reason = reason
        self.component_name = component_name
        self.component_sub_type = component_sub_type
        self.component_type = component_type
        self._resource_type = resource_type
        self.sequence_no = sequence_no
        self.timestamp = timestamp
        self.timestamp_micro = timestamp_micro
        self.transport_node_id = transport_node_id
        self.transport_node_name = transport_node_name
        self.transport_node_type = transport_node_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

TraceflowObservationDropped._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.traceflow_observation_dropped', {
        'acl_rule_id': type.OptionalType(type.IntegerType()),
        'arp_fail_reason': type.OptionalType(type.StringType()),
        'lport_id': type.OptionalType(type.StringType()),
        'lport_name': type.OptionalType(type.StringType()),
        'nat_rule_id': type.OptionalType(type.IntegerType()),
        'reason': type.OptionalType(type.StringType()),
        'component_name': type.OptionalType(type.StringType()),
        'component_sub_type': type.OptionalType(type.StringType()),
        'component_type': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'sequence_no': type.OptionalType(type.IntegerType()),
        'timestamp': type.OptionalType(type.IntegerType()),
        'timestamp_micro': type.OptionalType(type.IntegerType()),
        'transport_node_id': type.OptionalType(type.StringType()),
        'transport_node_name': type.OptionalType(type.StringType()),
        'transport_node_type': type.OptionalType(type.StringType()),
    },
    TraceflowObservationDropped,
    False,
    None))



class TraceflowObservationDroppedLogical(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'component_id': 'component_id',
                            'service_path_index': 'service_path_index',
                            'acl_rule_id': 'acl_rule_id',
                            'arp_fail_reason': 'arp_fail_reason',
                            'lport_id': 'lport_id',
                            'lport_name': 'lport_name',
                            'nat_rule_id': 'nat_rule_id',
                            'reason': 'reason',
                            'component_name': 'component_name',
                            'component_sub_type': 'component_sub_type',
                            'component_type': 'component_type',
                            'resource_type': 'resource_type',
                            'sequence_no': 'sequence_no',
                            'timestamp': 'timestamp',
                            'timestamp_micro': 'timestamp_micro',
                            'transport_node_id': 'transport_node_id',
                            'transport_node_name': 'transport_node_name',
                            'transport_node_type': 'transport_node_type',
                            }

    def __init__(self,
                 component_id=None,
                 service_path_index=None,
                 acl_rule_id=None,
                 arp_fail_reason=None,
                 lport_id=None,
                 lport_name=None,
                 nat_rule_id=None,
                 reason=None,
                 component_name=None,
                 component_sub_type=None,
                 component_type=None,
                 resource_type=None,
                 sequence_no=None,
                 timestamp=None,
                 timestamp_micro=None,
                 transport_node_id=None,
                 transport_node_name=None,
                 transport_node_type=None,
                ):
        """
        :type  component_id: :class:`str` or ``None``
        :param component_id: The id of the component that dropped the traceflow packet.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  service_path_index: :class:`long` or ``None``
        :param service_path_index: The index of service path that is a chain of services represents
            the point where the traceflow packet was dropped. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  acl_rule_id: :class:`long` or ``None``
        :param acl_rule_id: The id of the acl rule that was applied to drop the traceflow
            packet format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  arp_fail_reason: :class:`str` or ``None``
        :param arp_fail_reason: Possible values are: 
            
            * :attr:`TraceflowObservationDropped.ARP_FAIL_REASON_UNKNOWN`
            * :attr:`TraceflowObservationDropped.ARP_FAIL_REASON_TIMEOUT`
            * :attr:`TraceflowObservationDropped.ARP_FAIL_REASON_CPFAIL`
            * :attr:`TraceflowObservationDropped.ARP_FAIL_REASON_FROMCP`
            * :attr:`TraceflowObservationDropped.ARP_FAIL_REASON_PORTDESTROY`
            * :attr:`TraceflowObservationDropped.ARP_FAIL_REASON_TABLEDESTROY`
            * :attr:`TraceflowObservationDropped.ARP_FAIL_REASON_NETDESTROY`
            
            This field specifies the ARP fails reason ARP_TIMEOUT - ARP failure
            due to query control plane timeout ARP_CPFAIL - ARP failure due
            post ARP query message to control plane failure ARP_FROMCP - ARP
            failure due to deleting ARP entry from control plane
            ARP_PORTDESTROY - ARP failure due to port destruction
            ARP_TABLEDESTROY - ARP failure due to ARP table destruction
            ARP_NETDESTROY - ARP failure due to overlay network destruction
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  lport_id: :class:`str` or ``None``
        :param lport_id: The id of the logical port at which the traceflow packet was
            dropped
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  lport_name: :class:`str` or ``None``
        :param lport_name: The name of the logical port at which the traceflow packet was
            dropped
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  nat_rule_id: :class:`long` or ``None``
        :param nat_rule_id: The ID of the NAT rule that was applied to forward the traceflow
            packet format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  reason: :class:`str` or ``None``
        :param reason: Possible values are: 
            
            * :attr:`TraceflowObservationDropped.REASON_ARP_FAIL`
            * :attr:`TraceflowObservationDropped.REASON_BFD`
            * :attr:`TraceflowObservationDropped.REASON_DHCP`
            * :attr:`TraceflowObservationDropped.REASON_FW_RULE`
            * :attr:`TraceflowObservationDropped.REASON_GENEVE`
            * :attr:`TraceflowObservationDropped.REASON_GRE`
            * :attr:`TraceflowObservationDropped.REASON_IFACE`
            * :attr:`TraceflowObservationDropped.REASON_IP`
            * :attr:`TraceflowObservationDropped.REASON_IP_REASS`
            * :attr:`TraceflowObservationDropped.REASON_IPSEC`
            * :attr:`TraceflowObservationDropped.REASON_IPSEC_VTI`
            * :attr:`TraceflowObservationDropped.REASON_L2VPN`
            * :attr:`TraceflowObservationDropped.REASON_L4PORT`
            * :attr:`TraceflowObservationDropped.REASON_LB`
            * :attr:`TraceflowObservationDropped.REASON_LROUTER`
            * :attr:`TraceflowObservationDropped.REASON_LSERVICE`
            * :attr:`TraceflowObservationDropped.REASON_LSWITCH`
            * :attr:`TraceflowObservationDropped.REASON_MD_PROXY`
            * :attr:`TraceflowObservationDropped.REASON_NAT`
            * :attr:`TraceflowObservationDropped.REASON_ND_NS_FAIL`
            * :attr:`TraceflowObservationDropped.REASON_NEIGH`
            * :attr:`TraceflowObservationDropped.REASON_NO_EIP_FOUND`
            * :attr:`TraceflowObservationDropped.REASON_NO_EIP_ASSOCIATION`
            * :attr:`TraceflowObservationDropped.REASON_NO_ENI_FOR_IP`
            * :attr:`TraceflowObservationDropped.REASON_NO_ENI_FOR_LIF`
            * :attr:`TraceflowObservationDropped.REASON_NO_ROUTE`
            * :attr:`TraceflowObservationDropped.REASON_NO_ROUTE_TABLE_FOUND`
            *
              :attr:`TraceflowObservationDropped.REASON_NO_UNDERLAY_ROUTE_FOUND`
            * :attr:`TraceflowObservationDropped.REASON_NOT_VDR_DOWNLINK_`
            * :attr:`TraceflowObservationDropped.REASON_NO_VDR_FOUND`
            * :attr:`TraceflowObservationDropped.REASON_NO_VDR_ON_HOST`
            * :attr:`TraceflowObservationDropped.REASON_NOT_VDR_UPLINK_`
            * :attr:`TraceflowObservationDropped.REASON_SERVICE_INSERT`
            * :attr:`TraceflowObservationDropped.REASON_SPOOFGUARD`
            * :attr:`TraceflowObservationDropped.REASON_TTL_ZERO`
            * :attr:`TraceflowObservationDropped.REASON_TUNNEL`
            * :attr:`TraceflowObservationDropped.REASON_VXLAN`
            * :attr:`TraceflowObservationDropped.REASON_VXSTT`
            * :attr:`TraceflowObservationDropped.REASON_VMC_NO_RESPONSE`
            * :attr:`TraceflowObservationDropped.REASON_WRONG_UPLINK`
            * :attr:`TraceflowObservationDropped.REASON_UNKNOWN`
            
             The reason traceflow packet was dropped
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  component_name: :class:`str` or ``None``
        :param component_name: The name of the component that issued the observation.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  component_sub_type: :class:`str` or ``None``
        :param component_sub_type: Possible values are: 
            
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_LR_TIER0`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_LR_TIER1`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_LR_VRF_TIER0`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_LS_TRANSIT`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_SI_CLASSIFIER`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_SI_PROXY`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_VDR`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_ENI`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_AWS_GATEWAY`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_TGW_ROUTE`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_EDGE_UPLINK`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_DELL_GATEWAY`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_UNKNOWN`
            
             The sub type of the component that issued the observation.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  component_type: :class:`str` or ``None``
        :param component_type: Possible values are: 
            
            * :attr:`TraceflowObservation.COMPONENT_TYPE_PHYSICAL`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_LR`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_LS`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_DFW`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_BRIDGE`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_EDGE_TUNNEL`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_EDGE_HOSTSWITCH`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_FW_BRIDGE`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_LOAD_BALANCER`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_NAT`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_IPSEC`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_SERVICE_INSERTION`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_VMC`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_SPOOFGUARD`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_EDGE_FW`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_UNKNOWN`
            
             The type of the component that issued the observation.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONFORWARDED`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONDROPPED`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONDELIVERED`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONRECEIVED`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONFORWARDEDLOGICAL`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONDROPPEDLOGICAL`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONRECEIVEDLOGICAL`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONREPLICATIONLOGICAL`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONRELAYEDLOGICAL`
        :type  sequence_no: :class:`long` or ``None``
        :param sequence_no: the hop count for observations on the transport node that a
            traceflow packet is injected in will be 0. The hop count is
            incremented each time a subsequent transport node receives the
            traceflow packet. The sequence number of 999 indicates that the hop
            count could not be determined for the containing observation.
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  timestamp: :class:`long` or ``None``
        :param timestamp: Timestamp when the observation was created by the transport node
            (milliseconds epoch) format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  timestamp_micro: :class:`long` or ``None``
        :param timestamp_micro: Timestamp when the observation was created by the transport node
            (microseconds epoch) format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  transport_node_id: :class:`str` or ``None``
        :param transport_node_id: id of the transport node that observed a traceflow packet
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  transport_node_name: :class:`str` or ``None``
        :param transport_node_name: name of the transport node that observed a traceflow packet
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  transport_node_type: :class:`str` or ``None``
        :param transport_node_type: Possible values are: 
            
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_ESX`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_RHELKVM`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_UBUNTUKVM`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_EDGE`
            *
              :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_PUBLIC_CLOUD_GATEWAY_NODE`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_OTHERS`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_HYPERV`
            
             type of the transport node that observed a traceflow packet
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.component_id = component_id
        self.service_path_index = service_path_index
        self.acl_rule_id = acl_rule_id
        self.arp_fail_reason = arp_fail_reason
        self.lport_id = lport_id
        self.lport_name = lport_name
        self.nat_rule_id = nat_rule_id
        self.reason = reason
        self.component_name = component_name
        self.component_sub_type = component_sub_type
        self.component_type = component_type
        self._resource_type = resource_type
        self.sequence_no = sequence_no
        self.timestamp = timestamp
        self.timestamp_micro = timestamp_micro
        self.transport_node_id = transport_node_id
        self.transport_node_name = transport_node_name
        self.transport_node_type = transport_node_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

TraceflowObservationDroppedLogical._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.traceflow_observation_dropped_logical', {
        'component_id': type.OptionalType(type.StringType()),
        'service_path_index': type.OptionalType(type.IntegerType()),
        'acl_rule_id': type.OptionalType(type.IntegerType()),
        'arp_fail_reason': type.OptionalType(type.StringType()),
        'lport_id': type.OptionalType(type.StringType()),
        'lport_name': type.OptionalType(type.StringType()),
        'nat_rule_id': type.OptionalType(type.IntegerType()),
        'reason': type.OptionalType(type.StringType()),
        'component_name': type.OptionalType(type.StringType()),
        'component_sub_type': type.OptionalType(type.StringType()),
        'component_type': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'sequence_no': type.OptionalType(type.IntegerType()),
        'timestamp': type.OptionalType(type.IntegerType()),
        'timestamp_micro': type.OptionalType(type.IntegerType()),
        'transport_node_id': type.OptionalType(type.StringType()),
        'transport_node_name': type.OptionalType(type.StringType()),
        'transport_node_type': type.OptionalType(type.StringType()),
    },
    TraceflowObservationDroppedLogical,
    False,
    None))



class TraceflowObservationForwarded(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "TraceflowObservationForwarded"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'context': 'context',
                            'dst_transport_node_id': 'dst_transport_node_id',
                            'dst_transport_node_name': 'dst_transport_node_name',
                            'local_ip_address': 'local_ip_address',
                            'remote_ip_address': 'remote_ip_address',
                            'uplink_name': 'uplink_name',
                            'vtep_label': 'vtep_label',
                            'component_name': 'component_name',
                            'component_sub_type': 'component_sub_type',
                            'component_type': 'component_type',
                            'resource_type': 'resource_type',
                            'sequence_no': 'sequence_no',
                            'timestamp': 'timestamp',
                            'timestamp_micro': 'timestamp_micro',
                            'transport_node_id': 'transport_node_id',
                            'transport_node_name': 'transport_node_name',
                            'transport_node_type': 'transport_node_type',
                            }

    def __init__(self,
                 context=None,
                 dst_transport_node_id=None,
                 dst_transport_node_name=None,
                 local_ip_address=None,
                 remote_ip_address=None,
                 uplink_name=None,
                 vtep_label=None,
                 component_name=None,
                 component_sub_type=None,
                 component_type=None,
                 resource_type='TraceflowObservationForwarded',
                 sequence_no=None,
                 timestamp=None,
                 timestamp_micro=None,
                 transport_node_id=None,
                 transport_node_name=None,
                 transport_node_type=None,
                ):
        """
        :type  context: :class:`long` or ``None``
        :param context: The 64bit tunnel context carried on the wire format: int64
        :type  dst_transport_node_id: :class:`str` or ``None``
        :param dst_transport_node_id: This field will not be always available. Use remote_ip_address when
            this field is not set.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  dst_transport_node_name: :class:`str` or ``None``
        :param dst_transport_node_name: The name of the transport node to which the traceflow packet is
            forwarded
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  local_ip_address: :class:`str` or ``None``
        :param local_ip_address: IP address of the source end of the tunnel format: ip
        :type  remote_ip_address: :class:`str` or ``None``
        :param remote_ip_address: IP address of the destination end of the tunnel format: ip
        :type  uplink_name: :class:`str` or ``None``
        :param uplink_name: The name of the uplink the traceflow packet is forwarded on
        :type  vtep_label: :class:`long` or ``None``
        :param vtep_label: The virtual tunnel endpoint label format: int64
        :type  component_name: :class:`str` or ``None``
        :param component_name: The name of the component that issued the observation.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  component_sub_type: :class:`str` or ``None``
        :param component_sub_type: Possible values are: 
            
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_LR_TIER0`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_LR_TIER1`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_LR_VRF_TIER0`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_LS_TRANSIT`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_SI_CLASSIFIER`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_SI_PROXY`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_VDR`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_ENI`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_AWS_GATEWAY`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_TGW_ROUTE`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_EDGE_UPLINK`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_DELL_GATEWAY`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_UNKNOWN`
            
             The sub type of the component that issued the observation.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  component_type: :class:`str` or ``None``
        :param component_type: Possible values are: 
            
            * :attr:`TraceflowObservation.COMPONENT_TYPE_PHYSICAL`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_LR`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_LS`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_DFW`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_BRIDGE`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_EDGE_TUNNEL`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_EDGE_HOSTSWITCH`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_FW_BRIDGE`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_LOAD_BALANCER`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_NAT`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_IPSEC`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_SERVICE_INSERTION`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_VMC`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_SPOOFGUARD`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_EDGE_FW`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_UNKNOWN`
            
             The type of the component that issued the observation.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONFORWARDED`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONDROPPED`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONDELIVERED`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONRECEIVED`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONFORWARDEDLOGICAL`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONDROPPEDLOGICAL`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONRECEIVEDLOGICAL`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONREPLICATIONLOGICAL`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONRELAYEDLOGICAL`
        :type  sequence_no: :class:`long` or ``None``
        :param sequence_no: the hop count for observations on the transport node that a
            traceflow packet is injected in will be 0. The hop count is
            incremented each time a subsequent transport node receives the
            traceflow packet. The sequence number of 999 indicates that the hop
            count could not be determined for the containing observation.
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  timestamp: :class:`long` or ``None``
        :param timestamp: Timestamp when the observation was created by the transport node
            (milliseconds epoch) format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  timestamp_micro: :class:`long` or ``None``
        :param timestamp_micro: Timestamp when the observation was created by the transport node
            (microseconds epoch) format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  transport_node_id: :class:`str` or ``None``
        :param transport_node_id: id of the transport node that observed a traceflow packet
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  transport_node_name: :class:`str` or ``None``
        :param transport_node_name: name of the transport node that observed a traceflow packet
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  transport_node_type: :class:`str` or ``None``
        :param transport_node_type: Possible values are: 
            
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_ESX`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_RHELKVM`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_UBUNTUKVM`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_EDGE`
            *
              :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_PUBLIC_CLOUD_GATEWAY_NODE`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_OTHERS`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_HYPERV`
            
             type of the transport node that observed a traceflow packet
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.context = context
        self.dst_transport_node_id = dst_transport_node_id
        self.dst_transport_node_name = dst_transport_node_name
        self.local_ip_address = local_ip_address
        self.remote_ip_address = remote_ip_address
        self.uplink_name = uplink_name
        self.vtep_label = vtep_label
        self.component_name = component_name
        self.component_sub_type = component_sub_type
        self.component_type = component_type
        self._resource_type = resource_type
        self.sequence_no = sequence_no
        self.timestamp = timestamp
        self.timestamp_micro = timestamp_micro
        self.transport_node_id = transport_node_id
        self.transport_node_name = transport_node_name
        self.transport_node_type = transport_node_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

TraceflowObservationForwarded._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.traceflow_observation_forwarded', {
        'context': type.OptionalType(type.IntegerType()),
        'dst_transport_node_id': type.OptionalType(type.StringType()),
        'dst_transport_node_name': type.OptionalType(type.StringType()),
        'local_ip_address': type.OptionalType(type.StringType()),
        'remote_ip_address': type.OptionalType(type.StringType()),
        'uplink_name': type.OptionalType(type.StringType()),
        'vtep_label': type.OptionalType(type.IntegerType()),
        'component_name': type.OptionalType(type.StringType()),
        'component_sub_type': type.OptionalType(type.StringType()),
        'component_type': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'sequence_no': type.OptionalType(type.IntegerType()),
        'timestamp': type.OptionalType(type.IntegerType()),
        'timestamp_micro': type.OptionalType(type.IntegerType()),
        'transport_node_id': type.OptionalType(type.StringType()),
        'transport_node_name': type.OptionalType(type.StringType()),
        'transport_node_type': type.OptionalType(type.StringType()),
    },
    TraceflowObservationForwarded,
    False,
    None))



class TraceflowObservationForwardedLogical(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "TraceflowObservationForwardedLogical"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    DST_COMPONENT_TYPE_PHYSICAL = "PHYSICAL"
    """


    """
    DST_COMPONENT_TYPE_LR = "LR"
    """


    """
    DST_COMPONENT_TYPE_LS = "LS"
    """


    """
    DST_COMPONENT_TYPE_DFW = "DFW"
    """


    """
    DST_COMPONENT_TYPE_BRIDGE = "BRIDGE"
    """


    """
    DST_COMPONENT_TYPE_EDGE_TUNNEL = "EDGE_TUNNEL"
    """


    """
    DST_COMPONENT_TYPE_EDGE_HOSTSWITCH = "EDGE_HOSTSWITCH"
    """


    """
    DST_COMPONENT_TYPE_FW_BRIDGE = "FW_BRIDGE"
    """


    """
    DST_COMPONENT_TYPE_LOAD_BALANCER = "LOAD_BALANCER"
    """


    """
    DST_COMPONENT_TYPE_NAT = "NAT"
    """


    """
    DST_COMPONENT_TYPE_IPSEC = "IPSEC"
    """


    """
    DST_COMPONENT_TYPE_SERVICE_INSERTION = "SERVICE_INSERTION"
    """


    """
    DST_COMPONENT_TYPE_VMC = "VMC"
    """


    """
    DST_COMPONENT_TYPE_SPOOFGUARD = "SPOOFGUARD"
    """


    """
    DST_COMPONENT_TYPE_EDGE_FW = "EDGE_FW"
    """


    """
    DST_COMPONENT_TYPE_UNKNOWN = "UNKNOWN"
    """


    """
    RESEND_TYPE_UNKNOWN = "UNKNOWN"
    """


    """
    RESEND_TYPE_ARP_UNKNOWN_FROM_CP = "ARP_UNKNOWN_FROM_CP"
    """


    """
    RESEND_TYPE_ND_NS_UNKNWON_FROM_CP = "ND_NS_UNKNWON_FROM_CP"
    """


    """



    _canonical_to_pep_names = {
                            'acl_rule_id': 'acl_rule_id',
                            'component_id': 'component_id',
                            'dst_component_id': 'dst_component_id',
                            'dst_component_name': 'dst_component_name',
                            'dst_component_type': 'dst_component_type',
                            'lport_id': 'lport_id',
                            'lport_name': 'lport_name',
                            'nat_rule_id': 'nat_rule_id',
                            'resend_type': 'resend_type',
                            'service_index': 'service_index',
                            'service_path_index': 'service_path_index',
                            'service_ttl': 'service_ttl',
                            'spoofguard_ip': 'spoofguard_ip',
                            'spoofguard_mac': 'spoofguard_mac',
                            'spoofguard_vlan_id': 'spoofguard_vlan_id',
                            'svc_nh_mac': 'svc_nh_mac',
                            'translated_dst_ip': 'translated_dst_ip',
                            'translated_src_ip': 'translated_src_ip',
                            'vni': 'vni',
                            'component_name': 'component_name',
                            'component_sub_type': 'component_sub_type',
                            'component_type': 'component_type',
                            'resource_type': 'resource_type',
                            'sequence_no': 'sequence_no',
                            'timestamp': 'timestamp',
                            'timestamp_micro': 'timestamp_micro',
                            'transport_node_id': 'transport_node_id',
                            'transport_node_name': 'transport_node_name',
                            'transport_node_type': 'transport_node_type',
                            }

    def __init__(self,
                 acl_rule_id=None,
                 component_id=None,
                 dst_component_id=None,
                 dst_component_name=None,
                 dst_component_type=None,
                 lport_id=None,
                 lport_name=None,
                 nat_rule_id=None,
                 resend_type=None,
                 service_index=None,
                 service_path_index=None,
                 service_ttl=None,
                 spoofguard_ip=None,
                 spoofguard_mac=None,
                 spoofguard_vlan_id=None,
                 svc_nh_mac=None,
                 translated_dst_ip=None,
                 translated_src_ip=None,
                 vni=None,
                 component_name=None,
                 component_sub_type=None,
                 component_type=None,
                 resource_type='TraceflowObservationForwardedLogical',
                 sequence_no=None,
                 timestamp=None,
                 timestamp_micro=None,
                 transport_node_id=None,
                 transport_node_name=None,
                 transport_node_type=None,
                ):
        """
        :type  acl_rule_id: :class:`long` or ``None``
        :param acl_rule_id: The id of the acl rule that was applied to forward the traceflow
            packet format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  component_id: :class:`str` or ``None``
        :param component_id: The id of the component that forwarded the traceflow packet.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  dst_component_id: :class:`str` or ``None``
        :param dst_component_id: The id of the destination component to which the traceflow packet
            was forwarded.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  dst_component_name: :class:`str` or ``None``
        :param dst_component_name: The name of the destination component to which the traceflow packet
            was forwarded.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  dst_component_type: :class:`str` or ``None``
        :param dst_component_type: Possible values are: 
            
            *
              :attr:`TraceflowObservationForwardedLogical.DST_COMPONENT_TYPE_PHYSICAL`
            *
              :attr:`TraceflowObservationForwardedLogical.DST_COMPONENT_TYPE_LR`
            *
              :attr:`TraceflowObservationForwardedLogical.DST_COMPONENT_TYPE_LS`
            *
              :attr:`TraceflowObservationForwardedLogical.DST_COMPONENT_TYPE_DFW`
            *
              :attr:`TraceflowObservationForwardedLogical.DST_COMPONENT_TYPE_BRIDGE`
            *
              :attr:`TraceflowObservationForwardedLogical.DST_COMPONENT_TYPE_EDGE_TUNNEL`
            *
              :attr:`TraceflowObservationForwardedLogical.DST_COMPONENT_TYPE_EDGE_HOSTSWITCH`
            *
              :attr:`TraceflowObservationForwardedLogical.DST_COMPONENT_TYPE_FW_BRIDGE`
            *
              :attr:`TraceflowObservationForwardedLogical.DST_COMPONENT_TYPE_LOAD_BALANCER`
            *
              :attr:`TraceflowObservationForwardedLogical.DST_COMPONENT_TYPE_NAT`
            *
              :attr:`TraceflowObservationForwardedLogical.DST_COMPONENT_TYPE_IPSEC`
            *
              :attr:`TraceflowObservationForwardedLogical.DST_COMPONENT_TYPE_SERVICE_INSERTION`
            *
              :attr:`TraceflowObservationForwardedLogical.DST_COMPONENT_TYPE_VMC`
            *
              :attr:`TraceflowObservationForwardedLogical.DST_COMPONENT_TYPE_SPOOFGUARD`
            *
              :attr:`TraceflowObservationForwardedLogical.DST_COMPONENT_TYPE_EDGE_FW`
            *
              :attr:`TraceflowObservationForwardedLogical.DST_COMPONENT_TYPE_UNKNOWN`
            
            The type of the destination component to which the traceflow packet
            was forwarded.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  lport_id: :class:`str` or ``None``
        :param lport_id: The id of the logical port through which the traceflow packet was
            forwarded.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  lport_name: :class:`str` or ``None``
        :param lport_name: The name of the logical port through which the traceflow packet was
            forwarded.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  nat_rule_id: :class:`long` or ``None``
        :param nat_rule_id: The ID of the NAT rule that was applied to forward the traceflow
            packet format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  resend_type: :class:`str` or ``None``
        :param resend_type: Possible values are: 
            
            * :attr:`TraceflowObservationForwardedLogical.RESEND_TYPE_UNKNOWN`
            *
              :attr:`TraceflowObservationForwardedLogical.RESEND_TYPE_ARP_UNKNOWN_FROM_CP`
            *
              :attr:`TraceflowObservationForwardedLogical.RESEND_TYPE_ND_NS_UNKNWON_FROM_CP`
            
            ARP_UNKNOWN_FROM_CP - Unknown ARP query result emitted by control
            plane ND_NS_UNKNOWN_FROM_CP - Unknown neighbor solicitation query
            result emitted by control plane UNKNOWN - Unknown resend type
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  service_index: :class:`long` or ``None``
        :param service_index: The index of the service insertion component format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  service_path_index: :class:`long` or ``None``
        :param service_path_index: The path index of the service insertion component format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  service_ttl: :class:`long` or ``None``
        :param service_ttl: The ttl of the service insertion component format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  spoofguard_ip: :class:`str` or ``None``
        :param spoofguard_ip: This field specified the prefix IP address a traceflow packet
            matched in the whitelist in spoofguard. format: ip-cidr-block
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  spoofguard_mac: :class:`str` or ``None``
        :param spoofguard_mac: The source MAC address of form:
            \"^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$\". For example:
            00:00:00:00:00:00. format: mac-address
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  spoofguard_vlan_id: :class:`long` or ``None``
        :param spoofguard_vlan_id: This field specified the VLAN id a traceflow packet matched in the
            whitelist in spoofguard. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  svc_nh_mac: :class:`str` or ``None``
        :param svc_nh_mac: MAC address of nexthop for service insertion(SI) in service VM(SVM)
            where the traceflow packet was received.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  translated_dst_ip: :class:`str` or ``None``
        :param translated_dst_ip: The translated destination IP address of VNP/NAT format: ip
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  translated_src_ip: :class:`str` or ``None``
        :param translated_src_ip: The translated source IP address of VPN/NAT format: ip
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  vni: :class:`long` or ``None``
        :param vni: VNI for the logical network on which the traceflow packet was
            forwarded. format: int32
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  component_name: :class:`str` or ``None``
        :param component_name: The name of the component that issued the observation.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  component_sub_type: :class:`str` or ``None``
        :param component_sub_type: Possible values are: 
            
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_LR_TIER0`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_LR_TIER1`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_LR_VRF_TIER0`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_LS_TRANSIT`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_SI_CLASSIFIER`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_SI_PROXY`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_VDR`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_ENI`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_AWS_GATEWAY`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_TGW_ROUTE`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_EDGE_UPLINK`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_DELL_GATEWAY`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_UNKNOWN`
            
             The sub type of the component that issued the observation.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  component_type: :class:`str` or ``None``
        :param component_type: Possible values are: 
            
            * :attr:`TraceflowObservation.COMPONENT_TYPE_PHYSICAL`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_LR`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_LS`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_DFW`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_BRIDGE`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_EDGE_TUNNEL`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_EDGE_HOSTSWITCH`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_FW_BRIDGE`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_LOAD_BALANCER`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_NAT`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_IPSEC`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_SERVICE_INSERTION`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_VMC`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_SPOOFGUARD`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_EDGE_FW`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_UNKNOWN`
            
             The type of the component that issued the observation.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONFORWARDED`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONDROPPED`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONDELIVERED`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONRECEIVED`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONFORWARDEDLOGICAL`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONDROPPEDLOGICAL`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONRECEIVEDLOGICAL`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONREPLICATIONLOGICAL`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONRELAYEDLOGICAL`
        :type  sequence_no: :class:`long` or ``None``
        :param sequence_no: the hop count for observations on the transport node that a
            traceflow packet is injected in will be 0. The hop count is
            incremented each time a subsequent transport node receives the
            traceflow packet. The sequence number of 999 indicates that the hop
            count could not be determined for the containing observation.
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  timestamp: :class:`long` or ``None``
        :param timestamp: Timestamp when the observation was created by the transport node
            (milliseconds epoch) format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  timestamp_micro: :class:`long` or ``None``
        :param timestamp_micro: Timestamp when the observation was created by the transport node
            (microseconds epoch) format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  transport_node_id: :class:`str` or ``None``
        :param transport_node_id: id of the transport node that observed a traceflow packet
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  transport_node_name: :class:`str` or ``None``
        :param transport_node_name: name of the transport node that observed a traceflow packet
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  transport_node_type: :class:`str` or ``None``
        :param transport_node_type: Possible values are: 
            
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_ESX`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_RHELKVM`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_UBUNTUKVM`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_EDGE`
            *
              :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_PUBLIC_CLOUD_GATEWAY_NODE`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_OTHERS`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_HYPERV`
            
             type of the transport node that observed a traceflow packet
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.acl_rule_id = acl_rule_id
        self.component_id = component_id
        self.dst_component_id = dst_component_id
        self.dst_component_name = dst_component_name
        self.dst_component_type = dst_component_type
        self.lport_id = lport_id
        self.lport_name = lport_name
        self.nat_rule_id = nat_rule_id
        self.resend_type = resend_type
        self.service_index = service_index
        self.service_path_index = service_path_index
        self.service_ttl = service_ttl
        self.spoofguard_ip = spoofguard_ip
        self.spoofguard_mac = spoofguard_mac
        self.spoofguard_vlan_id = spoofguard_vlan_id
        self.svc_nh_mac = svc_nh_mac
        self.translated_dst_ip = translated_dst_ip
        self.translated_src_ip = translated_src_ip
        self.vni = vni
        self.component_name = component_name
        self.component_sub_type = component_sub_type
        self.component_type = component_type
        self._resource_type = resource_type
        self.sequence_no = sequence_no
        self.timestamp = timestamp
        self.timestamp_micro = timestamp_micro
        self.transport_node_id = transport_node_id
        self.transport_node_name = transport_node_name
        self.transport_node_type = transport_node_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

TraceflowObservationForwardedLogical._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.traceflow_observation_forwarded_logical', {
        'acl_rule_id': type.OptionalType(type.IntegerType()),
        'component_id': type.OptionalType(type.StringType()),
        'dst_component_id': type.OptionalType(type.StringType()),
        'dst_component_name': type.OptionalType(type.StringType()),
        'dst_component_type': type.OptionalType(type.StringType()),
        'lport_id': type.OptionalType(type.StringType()),
        'lport_name': type.OptionalType(type.StringType()),
        'nat_rule_id': type.OptionalType(type.IntegerType()),
        'resend_type': type.OptionalType(type.StringType()),
        'service_index': type.OptionalType(type.IntegerType()),
        'service_path_index': type.OptionalType(type.IntegerType()),
        'service_ttl': type.OptionalType(type.IntegerType()),
        'spoofguard_ip': type.OptionalType(type.StringType()),
        'spoofguard_mac': type.OptionalType(type.StringType()),
        'spoofguard_vlan_id': type.OptionalType(type.IntegerType()),
        'svc_nh_mac': type.OptionalType(type.StringType()),
        'translated_dst_ip': type.OptionalType(type.StringType()),
        'translated_src_ip': type.OptionalType(type.StringType()),
        'vni': type.OptionalType(type.IntegerType()),
        'component_name': type.OptionalType(type.StringType()),
        'component_sub_type': type.OptionalType(type.StringType()),
        'component_type': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'sequence_no': type.OptionalType(type.IntegerType()),
        'timestamp': type.OptionalType(type.IntegerType()),
        'timestamp_micro': type.OptionalType(type.IntegerType()),
        'transport_node_id': type.OptionalType(type.StringType()),
        'transport_node_name': type.OptionalType(type.StringType()),
        'transport_node_type': type.OptionalType(type.StringType()),
    },
    TraceflowObservationForwardedLogical,
    False,
    None))



class TraceflowObservationListResult(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param results: TraceflowObservation list results
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`TraceflowObservation`. When methods return a value of this
            class as a return value, the attribute will contain all the
            attributes defined in :class:`TraceflowObservation`.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


TraceflowObservationListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.traceflow_observation_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'TraceflowObservation')]))),
    },
    TraceflowObservationListResult,
    False,
    None))



class TraceflowObservationReceived(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "TraceflowObservationReceived"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'local_ip_address': 'local_ip_address',
                            'remote_ip_address': 'remote_ip_address',
                            'uplink_name': 'uplink_name',
                            'vtep_label': 'vtep_label',
                            'component_name': 'component_name',
                            'component_sub_type': 'component_sub_type',
                            'component_type': 'component_type',
                            'resource_type': 'resource_type',
                            'sequence_no': 'sequence_no',
                            'timestamp': 'timestamp',
                            'timestamp_micro': 'timestamp_micro',
                            'transport_node_id': 'transport_node_id',
                            'transport_node_name': 'transport_node_name',
                            'transport_node_type': 'transport_node_type',
                            }

    def __init__(self,
                 local_ip_address=None,
                 remote_ip_address=None,
                 uplink_name=None,
                 vtep_label=None,
                 component_name=None,
                 component_sub_type=None,
                 component_type=None,
                 resource_type='TraceflowObservationReceived',
                 sequence_no=None,
                 timestamp=None,
                 timestamp_micro=None,
                 transport_node_id=None,
                 transport_node_name=None,
                 transport_node_type=None,
                ):
        """
        :type  local_ip_address: :class:`str` or ``None``
        :param local_ip_address: IP address of the destination end of the tunnel format: ip
        :type  remote_ip_address: :class:`str` or ``None``
        :param remote_ip_address: IP address of the source end of the tunnel format: ip
        :type  uplink_name: :class:`str` or ``None``
        :param uplink_name: The name of the uplink the traceflow packet is received on
        :type  vtep_label: :class:`long` or ``None``
        :param vtep_label: The virtual tunnel endpoint label format: int64
        :type  component_name: :class:`str` or ``None``
        :param component_name: The name of the component that issued the observation.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  component_sub_type: :class:`str` or ``None``
        :param component_sub_type: Possible values are: 
            
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_LR_TIER0`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_LR_TIER1`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_LR_VRF_TIER0`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_LS_TRANSIT`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_SI_CLASSIFIER`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_SI_PROXY`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_VDR`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_ENI`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_AWS_GATEWAY`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_TGW_ROUTE`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_EDGE_UPLINK`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_DELL_GATEWAY`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_UNKNOWN`
            
             The sub type of the component that issued the observation.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  component_type: :class:`str` or ``None``
        :param component_type: Possible values are: 
            
            * :attr:`TraceflowObservation.COMPONENT_TYPE_PHYSICAL`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_LR`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_LS`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_DFW`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_BRIDGE`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_EDGE_TUNNEL`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_EDGE_HOSTSWITCH`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_FW_BRIDGE`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_LOAD_BALANCER`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_NAT`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_IPSEC`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_SERVICE_INSERTION`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_VMC`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_SPOOFGUARD`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_EDGE_FW`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_UNKNOWN`
            
             The type of the component that issued the observation.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONFORWARDED`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONDROPPED`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONDELIVERED`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONRECEIVED`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONFORWARDEDLOGICAL`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONDROPPEDLOGICAL`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONRECEIVEDLOGICAL`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONREPLICATIONLOGICAL`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONRELAYEDLOGICAL`
        :type  sequence_no: :class:`long` or ``None``
        :param sequence_no: the hop count for observations on the transport node that a
            traceflow packet is injected in will be 0. The hop count is
            incremented each time a subsequent transport node receives the
            traceflow packet. The sequence number of 999 indicates that the hop
            count could not be determined for the containing observation.
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  timestamp: :class:`long` or ``None``
        :param timestamp: Timestamp when the observation was created by the transport node
            (milliseconds epoch) format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  timestamp_micro: :class:`long` or ``None``
        :param timestamp_micro: Timestamp when the observation was created by the transport node
            (microseconds epoch) format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  transport_node_id: :class:`str` or ``None``
        :param transport_node_id: id of the transport node that observed a traceflow packet
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  transport_node_name: :class:`str` or ``None``
        :param transport_node_name: name of the transport node that observed a traceflow packet
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  transport_node_type: :class:`str` or ``None``
        :param transport_node_type: Possible values are: 
            
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_ESX`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_RHELKVM`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_UBUNTUKVM`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_EDGE`
            *
              :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_PUBLIC_CLOUD_GATEWAY_NODE`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_OTHERS`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_HYPERV`
            
             type of the transport node that observed a traceflow packet
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.local_ip_address = local_ip_address
        self.remote_ip_address = remote_ip_address
        self.uplink_name = uplink_name
        self.vtep_label = vtep_label
        self.component_name = component_name
        self.component_sub_type = component_sub_type
        self.component_type = component_type
        self._resource_type = resource_type
        self.sequence_no = sequence_no
        self.timestamp = timestamp
        self.timestamp_micro = timestamp_micro
        self.transport_node_id = transport_node_id
        self.transport_node_name = transport_node_name
        self.transport_node_type = transport_node_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

TraceflowObservationReceived._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.traceflow_observation_received', {
        'local_ip_address': type.OptionalType(type.StringType()),
        'remote_ip_address': type.OptionalType(type.StringType()),
        'uplink_name': type.OptionalType(type.StringType()),
        'vtep_label': type.OptionalType(type.IntegerType()),
        'component_name': type.OptionalType(type.StringType()),
        'component_sub_type': type.OptionalType(type.StringType()),
        'component_type': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'sequence_no': type.OptionalType(type.IntegerType()),
        'timestamp': type.OptionalType(type.IntegerType()),
        'timestamp_micro': type.OptionalType(type.IntegerType()),
        'transport_node_id': type.OptionalType(type.StringType()),
        'transport_node_name': type.OptionalType(type.StringType()),
        'transport_node_type': type.OptionalType(type.StringType()),
    },
    TraceflowObservationReceived,
    False,
    None))



class TraceflowObservationReceivedLogical(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "TraceflowObservationReceivedLogical"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    SRC_COMPONENT_TYPE_PHYSICAL = "PHYSICAL"
    """


    """
    SRC_COMPONENT_TYPE_LR = "LR"
    """


    """
    SRC_COMPONENT_TYPE_LS = "LS"
    """


    """
    SRC_COMPONENT_TYPE_DFW = "DFW"
    """


    """
    SRC_COMPONENT_TYPE_BRIDGE = "BRIDGE"
    """


    """
    SRC_COMPONENT_TYPE_EDGE_TUNNEL = "EDGE_TUNNEL"
    """


    """
    SRC_COMPONENT_TYPE_EDGE_HOSTSWITCH = "EDGE_HOSTSWITCH"
    """


    """
    SRC_COMPONENT_TYPE_FW_BRIDGE = "FW_BRIDGE"
    """


    """
    SRC_COMPONENT_TYPE_LOAD_BALANCER = "LOAD_BALANCER"
    """


    """
    SRC_COMPONENT_TYPE_NAT = "NAT"
    """


    """
    SRC_COMPONENT_TYPE_IPSEC = "IPSEC"
    """


    """
    SRC_COMPONENT_TYPE_SERVICE_INSERTION = "SERVICE_INSERTION"
    """


    """
    SRC_COMPONENT_TYPE_VMC = "VMC"
    """


    """
    SRC_COMPONENT_TYPE_SPOOFGUARD = "SPOOFGUARD"
    """


    """
    SRC_COMPONENT_TYPE_EDGE_FW = "EDGE_FW"
    """


    """
    SRC_COMPONENT_TYPE_UNKNOWN = "UNKNOWN"
    """


    """



    _canonical_to_pep_names = {
                            'component_id': 'component_id',
                            'lport_id': 'lport_id',
                            'lport_name': 'lport_name',
                            'src_component_id': 'src_component_id',
                            'src_component_name': 'src_component_name',
                            'src_component_type': 'src_component_type',
                            'svc_mac': 'svc_mac',
                            'vni': 'vni',
                            'component_name': 'component_name',
                            'component_sub_type': 'component_sub_type',
                            'component_type': 'component_type',
                            'resource_type': 'resource_type',
                            'sequence_no': 'sequence_no',
                            'timestamp': 'timestamp',
                            'timestamp_micro': 'timestamp_micro',
                            'transport_node_id': 'transport_node_id',
                            'transport_node_name': 'transport_node_name',
                            'transport_node_type': 'transport_node_type',
                            }

    def __init__(self,
                 component_id=None,
                 lport_id=None,
                 lport_name=None,
                 src_component_id=None,
                 src_component_name=None,
                 src_component_type=None,
                 svc_mac=None,
                 vni=None,
                 component_name=None,
                 component_sub_type=None,
                 component_type=None,
                 resource_type='TraceflowObservationReceivedLogical',
                 sequence_no=None,
                 timestamp=None,
                 timestamp_micro=None,
                 transport_node_id=None,
                 transport_node_name=None,
                 transport_node_type=None,
                ):
        """
        :type  component_id: :class:`str` or ``None``
        :param component_id: The id of the component that received the traceflow packet.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  lport_id: :class:`str` or ``None``
        :param lport_id: The id of the logical port at which the traceflow packet was
            received
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  lport_name: :class:`str` or ``None``
        :param lport_name: The name of the logical port at which the traceflow packet was
            received
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  src_component_id: :class:`str` or ``None``
        :param src_component_id: The id of the source component from which the traceflow packet was
            received.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  src_component_name: :class:`str` or ``None``
        :param src_component_name: The name of source component from which the traceflow packet was
            received.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  src_component_type: :class:`str` or ``None``
        :param src_component_type: Possible values are: 
            
            *
              :attr:`TraceflowObservationReceivedLogical.SRC_COMPONENT_TYPE_PHYSICAL`
            * :attr:`TraceflowObservationReceivedLogical.SRC_COMPONENT_TYPE_LR`
            * :attr:`TraceflowObservationReceivedLogical.SRC_COMPONENT_TYPE_LS`
            *
              :attr:`TraceflowObservationReceivedLogical.SRC_COMPONENT_TYPE_DFW`
            *
              :attr:`TraceflowObservationReceivedLogical.SRC_COMPONENT_TYPE_BRIDGE`
            *
              :attr:`TraceflowObservationReceivedLogical.SRC_COMPONENT_TYPE_EDGE_TUNNEL`
            *
              :attr:`TraceflowObservationReceivedLogical.SRC_COMPONENT_TYPE_EDGE_HOSTSWITCH`
            *
              :attr:`TraceflowObservationReceivedLogical.SRC_COMPONENT_TYPE_FW_BRIDGE`
            *
              :attr:`TraceflowObservationReceivedLogical.SRC_COMPONENT_TYPE_LOAD_BALANCER`
            *
              :attr:`TraceflowObservationReceivedLogical.SRC_COMPONENT_TYPE_NAT`
            *
              :attr:`TraceflowObservationReceivedLogical.SRC_COMPONENT_TYPE_IPSEC`
            *
              :attr:`TraceflowObservationReceivedLogical.SRC_COMPONENT_TYPE_SERVICE_INSERTION`
            *
              :attr:`TraceflowObservationReceivedLogical.SRC_COMPONENT_TYPE_VMC`
            *
              :attr:`TraceflowObservationReceivedLogical.SRC_COMPONENT_TYPE_SPOOFGUARD`
            *
              :attr:`TraceflowObservationReceivedLogical.SRC_COMPONENT_TYPE_EDGE_FW`
            *
              :attr:`TraceflowObservationReceivedLogical.SRC_COMPONENT_TYPE_UNKNOWN`
            
            The type of the source component from which the traceflow packet
            was received.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  svc_mac: :class:`str` or ``None``
        :param svc_mac: MAC address of SAN volume controller for service insertion(SI) in
            service VM(SVM) where the traceflow packet was received.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  vni: :class:`long` or ``None``
        :param vni: VNI for the logical network on which the traceflow packet was
            received. format: int32
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  component_name: :class:`str` or ``None``
        :param component_name: The name of the component that issued the observation.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  component_sub_type: :class:`str` or ``None``
        :param component_sub_type: Possible values are: 
            
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_LR_TIER0`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_LR_TIER1`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_LR_VRF_TIER0`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_LS_TRANSIT`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_SI_CLASSIFIER`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_SI_PROXY`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_VDR`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_ENI`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_AWS_GATEWAY`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_TGW_ROUTE`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_EDGE_UPLINK`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_DELL_GATEWAY`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_UNKNOWN`
            
             The sub type of the component that issued the observation.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  component_type: :class:`str` or ``None``
        :param component_type: Possible values are: 
            
            * :attr:`TraceflowObservation.COMPONENT_TYPE_PHYSICAL`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_LR`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_LS`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_DFW`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_BRIDGE`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_EDGE_TUNNEL`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_EDGE_HOSTSWITCH`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_FW_BRIDGE`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_LOAD_BALANCER`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_NAT`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_IPSEC`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_SERVICE_INSERTION`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_VMC`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_SPOOFGUARD`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_EDGE_FW`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_UNKNOWN`
            
             The type of the component that issued the observation.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONFORWARDED`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONDROPPED`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONDELIVERED`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONRECEIVED`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONFORWARDEDLOGICAL`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONDROPPEDLOGICAL`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONRECEIVEDLOGICAL`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONREPLICATIONLOGICAL`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONRELAYEDLOGICAL`
        :type  sequence_no: :class:`long` or ``None``
        :param sequence_no: the hop count for observations on the transport node that a
            traceflow packet is injected in will be 0. The hop count is
            incremented each time a subsequent transport node receives the
            traceflow packet. The sequence number of 999 indicates that the hop
            count could not be determined for the containing observation.
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  timestamp: :class:`long` or ``None``
        :param timestamp: Timestamp when the observation was created by the transport node
            (milliseconds epoch) format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  timestamp_micro: :class:`long` or ``None``
        :param timestamp_micro: Timestamp when the observation was created by the transport node
            (microseconds epoch) format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  transport_node_id: :class:`str` or ``None``
        :param transport_node_id: id of the transport node that observed a traceflow packet
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  transport_node_name: :class:`str` or ``None``
        :param transport_node_name: name of the transport node that observed a traceflow packet
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  transport_node_type: :class:`str` or ``None``
        :param transport_node_type: Possible values are: 
            
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_ESX`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_RHELKVM`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_UBUNTUKVM`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_EDGE`
            *
              :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_PUBLIC_CLOUD_GATEWAY_NODE`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_OTHERS`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_HYPERV`
            
             type of the transport node that observed a traceflow packet
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.component_id = component_id
        self.lport_id = lport_id
        self.lport_name = lport_name
        self.src_component_id = src_component_id
        self.src_component_name = src_component_name
        self.src_component_type = src_component_type
        self.svc_mac = svc_mac
        self.vni = vni
        self.component_name = component_name
        self.component_sub_type = component_sub_type
        self.component_type = component_type
        self._resource_type = resource_type
        self.sequence_no = sequence_no
        self.timestamp = timestamp
        self.timestamp_micro = timestamp_micro
        self.transport_node_id = transport_node_id
        self.transport_node_name = transport_node_name
        self.transport_node_type = transport_node_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

TraceflowObservationReceivedLogical._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.traceflow_observation_received_logical', {
        'component_id': type.OptionalType(type.StringType()),
        'lport_id': type.OptionalType(type.StringType()),
        'lport_name': type.OptionalType(type.StringType()),
        'src_component_id': type.OptionalType(type.StringType()),
        'src_component_name': type.OptionalType(type.StringType()),
        'src_component_type': type.OptionalType(type.StringType()),
        'svc_mac': type.OptionalType(type.StringType()),
        'vni': type.OptionalType(type.IntegerType()),
        'component_name': type.OptionalType(type.StringType()),
        'component_sub_type': type.OptionalType(type.StringType()),
        'component_type': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'sequence_no': type.OptionalType(type.IntegerType()),
        'timestamp': type.OptionalType(type.IntegerType()),
        'timestamp_micro': type.OptionalType(type.IntegerType()),
        'transport_node_id': type.OptionalType(type.StringType()),
        'transport_node_name': type.OptionalType(type.StringType()),
        'transport_node_type': type.OptionalType(type.StringType()),
    },
    TraceflowObservationReceivedLogical,
    False,
    None))



class TraceflowObservationRelayedLogical(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "TraceflowObservationRelayedLogical"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    MESSAGE_TYPE_REQUEST = "REQUEST"
    """


    """
    MESSAGE_TYPE_REPLY = "REPLY"
    """


    """



    _canonical_to_pep_names = {
                            'dst_server_address': 'dst_server_address',
                            'logical_comp_uuid': 'logical_comp_uuid',
                            'message_type': 'message_type',
                            'relay_server_address': 'relay_server_address',
                            'component_name': 'component_name',
                            'component_sub_type': 'component_sub_type',
                            'component_type': 'component_type',
                            'resource_type': 'resource_type',
                            'sequence_no': 'sequence_no',
                            'timestamp': 'timestamp',
                            'timestamp_micro': 'timestamp_micro',
                            'transport_node_id': 'transport_node_id',
                            'transport_node_name': 'transport_node_name',
                            'transport_node_type': 'transport_node_type',
                            }

    def __init__(self,
                 dst_server_address=None,
                 logical_comp_uuid=None,
                 message_type=None,
                 relay_server_address=None,
                 component_name=None,
                 component_sub_type=None,
                 component_type=None,
                 resource_type='TraceflowObservationRelayedLogical',
                 sequence_no=None,
                 timestamp=None,
                 timestamp_micro=None,
                 transport_node_id=None,
                 transport_node_name=None,
                 transport_node_type=None,
                ):
        """
        :type  dst_server_address: :class:`str` or ``None``
        :param dst_server_address: This field specified the IP address of the destination which the
            packet will be relayed. format: ip
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  logical_comp_uuid: :class:`str` or ``None``
        :param logical_comp_uuid: This field specified the logical component that relay service
            located.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  message_type: :class:`str` or ``None``
        :param message_type: Possible values are: 
            
            * :attr:`TraceflowObservationRelayedLogical.MESSAGE_TYPE_REQUEST`
            * :attr:`TraceflowObservationRelayedLogical.MESSAGE_TYPE_REPLY`
            
            This field specified the message type of the relay service REQUEST
            - The relay service will relay a request message to the destination
            server REPLY - The relay service will relay a reply message to the
            client
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relay_server_address: :class:`str` or ``None``
        :param relay_server_address: This field specified the IP address of the relay service. format:
            ip
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  component_name: :class:`str` or ``None``
        :param component_name: The name of the component that issued the observation.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  component_sub_type: :class:`str` or ``None``
        :param component_sub_type: Possible values are: 
            
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_LR_TIER0`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_LR_TIER1`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_LR_VRF_TIER0`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_LS_TRANSIT`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_SI_CLASSIFIER`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_SI_PROXY`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_VDR`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_ENI`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_AWS_GATEWAY`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_TGW_ROUTE`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_EDGE_UPLINK`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_DELL_GATEWAY`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_UNKNOWN`
            
             The sub type of the component that issued the observation.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  component_type: :class:`str` or ``None``
        :param component_type: Possible values are: 
            
            * :attr:`TraceflowObservation.COMPONENT_TYPE_PHYSICAL`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_LR`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_LS`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_DFW`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_BRIDGE`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_EDGE_TUNNEL`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_EDGE_HOSTSWITCH`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_FW_BRIDGE`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_LOAD_BALANCER`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_NAT`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_IPSEC`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_SERVICE_INSERTION`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_VMC`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_SPOOFGUARD`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_EDGE_FW`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_UNKNOWN`
            
             The type of the component that issued the observation.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONFORWARDED`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONDROPPED`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONDELIVERED`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONRECEIVED`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONFORWARDEDLOGICAL`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONDROPPEDLOGICAL`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONRECEIVEDLOGICAL`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONREPLICATIONLOGICAL`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONRELAYEDLOGICAL`
        :type  sequence_no: :class:`long` or ``None``
        :param sequence_no: the hop count for observations on the transport node that a
            traceflow packet is injected in will be 0. The hop count is
            incremented each time a subsequent transport node receives the
            traceflow packet. The sequence number of 999 indicates that the hop
            count could not be determined for the containing observation.
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  timestamp: :class:`long` or ``None``
        :param timestamp: Timestamp when the observation was created by the transport node
            (milliseconds epoch) format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  timestamp_micro: :class:`long` or ``None``
        :param timestamp_micro: Timestamp when the observation was created by the transport node
            (microseconds epoch) format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  transport_node_id: :class:`str` or ``None``
        :param transport_node_id: id of the transport node that observed a traceflow packet
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  transport_node_name: :class:`str` or ``None``
        :param transport_node_name: name of the transport node that observed a traceflow packet
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  transport_node_type: :class:`str` or ``None``
        :param transport_node_type: Possible values are: 
            
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_ESX`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_RHELKVM`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_UBUNTUKVM`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_EDGE`
            *
              :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_PUBLIC_CLOUD_GATEWAY_NODE`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_OTHERS`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_HYPERV`
            
             type of the transport node that observed a traceflow packet
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.dst_server_address = dst_server_address
        self.logical_comp_uuid = logical_comp_uuid
        self.message_type = message_type
        self.relay_server_address = relay_server_address
        self.component_name = component_name
        self.component_sub_type = component_sub_type
        self.component_type = component_type
        self._resource_type = resource_type
        self.sequence_no = sequence_no
        self.timestamp = timestamp
        self.timestamp_micro = timestamp_micro
        self.transport_node_id = transport_node_id
        self.transport_node_name = transport_node_name
        self.transport_node_type = transport_node_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

TraceflowObservationRelayedLogical._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.traceflow_observation_relayed_logical', {
        'dst_server_address': type.OptionalType(type.StringType()),
        'logical_comp_uuid': type.OptionalType(type.StringType()),
        'message_type': type.OptionalType(type.StringType()),
        'relay_server_address': type.OptionalType(type.StringType()),
        'component_name': type.OptionalType(type.StringType()),
        'component_sub_type': type.OptionalType(type.StringType()),
        'component_type': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'sequence_no': type.OptionalType(type.IntegerType()),
        'timestamp': type.OptionalType(type.IntegerType()),
        'timestamp_micro': type.OptionalType(type.IntegerType()),
        'transport_node_id': type.OptionalType(type.StringType()),
        'transport_node_name': type.OptionalType(type.StringType()),
        'transport_node_type': type.OptionalType(type.StringType()),
    },
    TraceflowObservationRelayedLogical,
    False,
    None))



class TraceflowObservationReplicationLogical(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "TraceflowObservationReplicationLogical"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    REPLICATION_TYPE_TX_VTEP = "TX_VTEP"
    """


    """
    REPLICATION_TYPE_TX_MTEP = "TX_MTEP"
    """


    """
    REPLICATION_TYPE_RX = "RX"
    """


    """



    _canonical_to_pep_names = {
                            'local_ip_address': 'local_ip_address',
                            'replication_type': 'replication_type',
                            'uplink_name': 'uplink_name',
                            'vtep_label': 'vtep_label',
                            'component_name': 'component_name',
                            'component_sub_type': 'component_sub_type',
                            'component_type': 'component_type',
                            'resource_type': 'resource_type',
                            'sequence_no': 'sequence_no',
                            'timestamp': 'timestamp',
                            'timestamp_micro': 'timestamp_micro',
                            'transport_node_id': 'transport_node_id',
                            'transport_node_name': 'transport_node_name',
                            'transport_node_type': 'transport_node_type',
                            }

    def __init__(self,
                 local_ip_address=None,
                 replication_type=None,
                 uplink_name=None,
                 vtep_label=None,
                 component_name=None,
                 component_sub_type=None,
                 component_type=None,
                 resource_type='TraceflowObservationReplicationLogical',
                 sequence_no=None,
                 timestamp=None,
                 timestamp_micro=None,
                 transport_node_id=None,
                 transport_node_name=None,
                 transport_node_type=None,
                ):
        """
        :type  local_ip_address: :class:`str` or ``None``
        :param local_ip_address: Local IP address of the component that replicates the packet.
            format: ip
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  replication_type: :class:`str` or ``None``
        :param replication_type: Possible values are: 
            
            *
              :attr:`TraceflowObservationReplicationLogical.REPLICATION_TYPE_TX_VTEP`
            *
              :attr:`TraceflowObservationReplicationLogical.REPLICATION_TYPE_TX_MTEP`
            *
              :attr:`TraceflowObservationReplicationLogical.REPLICATION_TYPE_RX`
            
            This field specifies the type of replication message TX_VTEP -
            Transmit replication to all VTEPs TX_MTEP - Transmit replication to
            all MTEPs RX - Receive replication
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  uplink_name: :class:`str` or ``None``
        :param uplink_name: The name of uplink
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  vtep_label: :class:`long` or ``None``
        :param vtep_label: The label of VTEP format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  component_name: :class:`str` or ``None``
        :param component_name: The name of the component that issued the observation.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  component_sub_type: :class:`str` or ``None``
        :param component_sub_type: Possible values are: 
            
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_LR_TIER0`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_LR_TIER1`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_LR_VRF_TIER0`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_LS_TRANSIT`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_SI_CLASSIFIER`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_SI_PROXY`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_VDR`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_ENI`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_AWS_GATEWAY`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_TGW_ROUTE`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_EDGE_UPLINK`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_DELL_GATEWAY`
            * :attr:`TraceflowObservation.COMPONENT_SUB_TYPE_UNKNOWN`
            
             The sub type of the component that issued the observation.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  component_type: :class:`str` or ``None``
        :param component_type: Possible values are: 
            
            * :attr:`TraceflowObservation.COMPONENT_TYPE_PHYSICAL`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_LR`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_LS`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_DFW`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_BRIDGE`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_EDGE_TUNNEL`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_EDGE_HOSTSWITCH`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_FW_BRIDGE`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_LOAD_BALANCER`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_NAT`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_IPSEC`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_SERVICE_INSERTION`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_VMC`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_SPOOFGUARD`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_EDGE_FW`
            * :attr:`TraceflowObservation.COMPONENT_TYPE_UNKNOWN`
            
             The type of the component that issued the observation.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONFORWARDED`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONDROPPED`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONDELIVERED`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONRECEIVED`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONFORWARDEDLOGICAL`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONDROPPEDLOGICAL`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONRECEIVEDLOGICAL`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONREPLICATIONLOGICAL`
            *
              :attr:`TraceflowObservation.RESOURCE_TYPE_TRACEFLOWOBSERVATIONRELAYEDLOGICAL`
        :type  sequence_no: :class:`long` or ``None``
        :param sequence_no: the hop count for observations on the transport node that a
            traceflow packet is injected in will be 0. The hop count is
            incremented each time a subsequent transport node receives the
            traceflow packet. The sequence number of 999 indicates that the hop
            count could not be determined for the containing observation.
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  timestamp: :class:`long` or ``None``
        :param timestamp: Timestamp when the observation was created by the transport node
            (milliseconds epoch) format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  timestamp_micro: :class:`long` or ``None``
        :param timestamp_micro: Timestamp when the observation was created by the transport node
            (microseconds epoch) format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  transport_node_id: :class:`str` or ``None``
        :param transport_node_id: id of the transport node that observed a traceflow packet
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  transport_node_name: :class:`str` or ``None``
        :param transport_node_name: name of the transport node that observed a traceflow packet
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  transport_node_type: :class:`str` or ``None``
        :param transport_node_type: Possible values are: 
            
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_ESX`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_RHELKVM`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_UBUNTUKVM`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_EDGE`
            *
              :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_PUBLIC_CLOUD_GATEWAY_NODE`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_OTHERS`
            * :attr:`TraceflowObservation.TRANSPORT_NODE_TYPE_HYPERV`
            
             type of the transport node that observed a traceflow packet
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.local_ip_address = local_ip_address
        self.replication_type = replication_type
        self.uplink_name = uplink_name
        self.vtep_label = vtep_label
        self.component_name = component_name
        self.component_sub_type = component_sub_type
        self.component_type = component_type
        self._resource_type = resource_type
        self.sequence_no = sequence_no
        self.timestamp = timestamp
        self.timestamp_micro = timestamp_micro
        self.transport_node_id = transport_node_id
        self.transport_node_name = transport_node_name
        self.transport_node_type = transport_node_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

TraceflowObservationReplicationLogical._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.traceflow_observation_replication_logical', {
        'local_ip_address': type.OptionalType(type.StringType()),
        'replication_type': type.OptionalType(type.StringType()),
        'uplink_name': type.OptionalType(type.StringType()),
        'vtep_label': type.OptionalType(type.IntegerType()),
        'component_name': type.OptionalType(type.StringType()),
        'component_sub_type': type.OptionalType(type.StringType()),
        'component_type': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'sequence_no': type.OptionalType(type.IntegerType()),
        'timestamp': type.OptionalType(type.IntegerType()),
        'timestamp_micro': type.OptionalType(type.IntegerType()),
        'transport_node_id': type.OptionalType(type.StringType()),
        'transport_node_name': type.OptionalType(type.StringType()),
        'transport_node_type': type.OptionalType(type.StringType()),
    },
    TraceflowObservationReplicationLogical,
    False,
    None))



class TrafficRateLimits(VapiStruct):
    """
    Enables traffic limit for incoming/outgoing broadcast and multicast
    packets. Use 0 to disable rate limiting for a specific traffic type

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'rx_broadcast': 'rx_broadcast',
                            'rx_multicast': 'rx_multicast',
                            'tx_broadcast': 'tx_broadcast',
                            'tx_multicast': 'tx_multicast',
                            }

    def __init__(self,
                 rx_broadcast=None,
                 rx_multicast=None,
                 tx_broadcast=None,
                 tx_multicast=None,
                ):
        """
        :type  rx_broadcast: :class:`long` or ``None``
        :param rx_broadcast: Incoming broadcast traffic limit in packets per second format:
            int32
        :type  rx_multicast: :class:`long` or ``None``
        :param rx_multicast: Incoming multicast traffic limit in packets per second format:
            int32
        :type  tx_broadcast: :class:`long` or ``None``
        :param tx_broadcast: Outgoing broadcast traffic limit in packets per second format:
            int32
        :type  tx_multicast: :class:`long` or ``None``
        :param tx_multicast: Outgoing multicast traffic limit in packets per second format:
            int32
        """
        self.rx_broadcast = rx_broadcast
        self.rx_multicast = rx_multicast
        self.tx_broadcast = tx_broadcast
        self.tx_multicast = tx_multicast
        VapiStruct.__init__(self)


TrafficRateLimits._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.traffic_rate_limits', {
        'rx_broadcast': type.OptionalType(type.IntegerType()),
        'rx_multicast': type.OptionalType(type.IntegerType()),
        'tx_broadcast': type.OptionalType(type.IntegerType()),
        'tx_multicast': type.OptionalType(type.IntegerType()),
    },
    TrafficRateLimits,
    False,
    None))



class TransportNodeSpanEnforcedStatus(VapiStruct):
    """
    Detailed Realized Status of an Intent on a span of Transport Nodes.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "TransportNodeSpanEnforcedStatus"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'enforced_status_per_transport_node': 'enforced_status_per_transport_node',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 enforced_status_per_transport_node=None,
                 resource_type='TransportNodeSpanEnforcedStatus',
                ):
        """
        :type  enforced_status_per_transport_node: :class:`list` of :class:`EnforcedStatusPerTransportNode` or ``None``
        :param enforced_status_per_transport_node: List of Detailed Realized Status per Transport Node.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`EnforcedStatusPerScopeNsxt.RESOURCE_TYPE_TRANSPORTNODESPANENFORCEDSTATUS`
            
             Enforced Realized Status Per Scope Resource Type.
        """
        self.enforced_status_per_transport_node = enforced_status_per_transport_node
        self._resource_type = resource_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

TransportNodeSpanEnforcedStatus._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.transport_node_span_enforced_status', {
        'enforced_status_per_transport_node': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'EnforcedStatusPerTransportNode'))),
        'resource_type': type.StringType(),
    },
    TransportNodeSpanEnforcedStatus,
    False,
    None))



class TransportProtocolHeader(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'dhcp_header': 'dhcp_header',
                            'dhcpv6_header': 'dhcpv6_header',
                            'dns_header': 'dns_header',
                            'icmp_echo_request_header': 'icmp_echo_request_header',
                            'ndp_header': 'ndp_header',
                            'tcp_header': 'tcp_header',
                            'udp_header': 'udp_header',
                            }

    def __init__(self,
                 dhcp_header=None,
                 dhcpv6_header=None,
                 dns_header=None,
                 icmp_echo_request_header=None,
                 ndp_header=None,
                 tcp_header=None,
                 udp_header=None,
                ):
        """
        :type  dhcp_header: :class:`DhcpHeader` or ``None``
        :param dhcp_header: DHCP header
        :type  dhcpv6_header: :class:`Dhcpv6Header` or ``None``
        :param dhcpv6_header: DHCP v6 header
        :type  dns_header: :class:`DnsHeader` or ``None``
        :param dns_header: DNS header
        :type  icmp_echo_request_header: :class:`IcmpEchoRequestHeader` or ``None``
        :param icmp_echo_request_header: ICMP echo request header
        :type  ndp_header: :class:`NdpHeader` or ``None``
        :param ndp_header: Neighbor discovery protocol header
        :type  tcp_header: :class:`TcpHeader` or ``None``
        :param tcp_header: TCP header
        :type  udp_header: :class:`UdpHeader` or ``None``
        :param udp_header: UDP header
        """
        self.dhcp_header = dhcp_header
        self.dhcpv6_header = dhcpv6_header
        self.dns_header = dns_header
        self.icmp_echo_request_header = icmp_echo_request_header
        self.ndp_header = ndp_header
        self.tcp_header = tcp_header
        self.udp_header = udp_header
        VapiStruct.__init__(self)


TransportProtocolHeader._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.transport_protocol_header', {
        'dhcp_header': type.OptionalType(type.ReferenceType(__name__, 'DhcpHeader')),
        'dhcpv6_header': type.OptionalType(type.ReferenceType(__name__, 'Dhcpv6Header')),
        'dns_header': type.OptionalType(type.ReferenceType(__name__, 'DnsHeader')),
        'icmp_echo_request_header': type.OptionalType(type.ReferenceType(__name__, 'IcmpEchoRequestHeader')),
        'ndp_header': type.OptionalType(type.ReferenceType(__name__, 'NdpHeader')),
        'tcp_header': type.OptionalType(type.ReferenceType(__name__, 'TcpHeader')),
        'udp_header': type.OptionalType(type.ReferenceType(__name__, 'UdpHeader')),
    },
    TransportProtocolHeader,
    False,
    None))



class TunnelInterfaceIPSubnet(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'ip_addresses': 'ip_addresses',
                            'prefix_length': 'prefix_length',
                            }

    def __init__(self,
                 ip_addresses=None,
                 prefix_length=None,
                ):
        """
        :type  ip_addresses: :class:`list` of :class:`str` or ``None``
        :param ip_addresses: IPv4 Addresses format: ipv4
        :type  prefix_length: :class:`long` or ``None``
        :param prefix_length: Subnet Prefix Length format: int64
        """
        self.ip_addresses = ip_addresses
        self.prefix_length = prefix_length
        VapiStruct.__init__(self)


TunnelInterfaceIPSubnet._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.tunnel_interface_IP_subnet', {
        'ip_addresses': type.OptionalType(type.ListType(type.StringType())),
        'prefix_length': type.OptionalType(type.IntegerType()),
    },
    TunnelInterfaceIPSubnet,
    False,
    None))



class TunnelSubnet(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'ip_addresses': 'ip_addresses',
                            'prefix_length': 'prefix_length',
                            }

    def __init__(self,
                 ip_addresses=None,
                 prefix_length=None,
                ):
        """
        :type  ip_addresses: :class:`list` of :class:`str` or ``None``
        :param ip_addresses: Subnet ip addresses format: ipv4
        :type  prefix_length: :class:`long` or ``None``
        :param prefix_length: Subnet Prefix Length format: int64
        """
        self.ip_addresses = ip_addresses
        self.prefix_length = prefix_length
        VapiStruct.__init__(self)


TunnelSubnet._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.tunnel_subnet', {
        'ip_addresses': type.OptionalType(type.ListType(type.StringType())),
        'prefix_length': type.OptionalType(type.IntegerType()),
    },
    TunnelSubnet,
    False,
    None))



class UdpHeader(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'dst_port': 'dst_port',
                            'src_port': 'src_port',
                            }

    def __init__(self,
                 dst_port=None,
                 src_port=None,
                ):
        """
        :type  dst_port: :class:`long` or ``None``
        :param dst_port: Destination port of udp header format: int64
        :type  src_port: :class:`long` or ``None``
        :param src_port: Source port of udp header format: int64
        """
        self.dst_port = dst_port
        self.src_port = src_port
        VapiStruct.__init__(self)


UdpHeader._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.udp_header', {
        'dst_port': type.OptionalType(type.IntegerType()),
        'src_port': type.OptionalType(type.IntegerType()),
    },
    UdpHeader,
    False,
    None))



class UdpPolicyLbMonitorProfile(VapiStruct):
    """
    Active healthchecks are disabled by default and can be enabled for a server
    pool by binding a health monitor to the Group through the PolicyLbRule
    object. This represents active health monitoring over UDP. Active
    healthchecks are initiated periodically, at a configurable interval, to
    each member of the Group. Only if a healthcheck fails consecutively for a
    specified number of times (fall_count) to a member will the member status
    be marked DOWN. Once a member is DOWN, a specified number of consecutive
    successful healthchecks (rise_count) will bring the member back to UP
    state. After a healthcheck is initiated, if it does not complete within a
    certain period, then also the healthcheck is considered to be unsuccessful.
    Completing a healthcheck within timeout means establishing a connection
    (TCP or SSL), if applicable, sending the request and receiving the
    response, all within the configured timeout.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "UdpPolicyLbMonitorProfile"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'receive': 'receive',
                            'send': 'send',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'fall_count': 'fall_count',
                            'interval': 'interval',
                            'monitor_port': 'monitor_port',
                            'rise_count': 'rise_count',
                            'timeout': 'timeout',
                            }

    def __init__(self,
                 receive=None,
                 send=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='UdpPolicyLbMonitorProfile',
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 fall_count=None,
                 interval=None,
                 monitor_port=None,
                 rise_count=None,
                 timeout=None,
                ):
        """
        :type  receive: :class:`str` or ``None``
        :param receive: Expected data, can be anywhere in the response and it has to be a
            string, regular expressions are not supported. UDP healthcheck is
            considered failed if there is no server response within the timeout
            period.
        :type  send: :class:`str` or ``None``
        :param send: The data to be sent to the monitored server.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`PolicyLbMonitorProfile.RESOURCE_TYPE_TCPPOLICYLBMONITORPROFILE`
            *
              :attr:`PolicyLbMonitorProfile.RESOURCE_TYPE_UDPPOLICYLBMONITORPROFILE`
            *
              :attr:`PolicyLbMonitorProfile.RESOURCE_TYPE_ICMPPOLICYLBMONITORPROFILE`
            *
              :attr:`PolicyLbMonitorProfile.RESOURCE_TYPE_HTTPPOLICYLBMONITORPROFILE`
            *
              :attr:`PolicyLbMonitorProfile.RESOURCE_TYPE_HTTPSPOLICYLBMONITORPROFILE`
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  fall_count: :class:`long` or ``None``
        :param fall_count: Only if a healthcheck fails consecutively for a specified number of
            times, given with fall_count, to a member will the member status be
            marked DOWN. format: int64
        :type  interval: :class:`long` or ``None``
        :param interval: Active healthchecks are initiated periodically, at a configurable
            interval (in seconds), to each member of the Group. format: int64
        :type  monitor_port: :class:`long` or ``None``
        :param monitor_port: Typically, monitors perform healthchecks to Group members using the
            member IP address and pool_port. However, in some cases, customers
            prefer to run healthchecks against a different port than the pool
            member port which handles actual application traffic. In such
            cases, the port to run healthchecks against can be specified in the
            monitor_port value. format: int32
        :type  rise_count: :class:`long` or ``None``
        :param rise_count: Once a member is DOWN, a specified number of consecutive successful
            healthchecks specified by rise_count will bring the member back to
            UP state. format: int64
        :type  timeout: :class:`long` or ``None``
        :param timeout: Timeout specified in seconds. After a healthcheck is initiated, if
            it does not complete within a certain period, then also the
            healthcheck is considered to be unsuccessful. Completing a
            healthcheck within timeout means establishing a connection (TCP or
            SSL), if applicable, sending the request and receiving the
            response, all within the configured timeout. format: int64
        """
        self.receive = receive
        self.send = send
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.fall_count = fall_count
        self.interval = interval
        self.monitor_port = monitor_port
        self.rise_count = rise_count
        self.timeout = timeout
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

UdpPolicyLbMonitorProfile._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.udp_policy_lb_monitor_profile', {
        'receive': type.OptionalType(type.StringType()),
        'send': type.OptionalType(type.StringType()),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'fall_count': type.OptionalType(type.IntegerType()),
        'interval': type.OptionalType(type.IntegerType()),
        'monitor_port': type.OptionalType(type.IntegerType()),
        'rise_count': type.OptionalType(type.IntegerType()),
        'timeout': type.OptionalType(type.IntegerType()),
    },
    UdpPolicyLbMonitorProfile,
    False,
    None))



class UdpPolicyLbVirtualServer(VapiStruct):
    """
    Virtual server acts as a facade to an application, receives all client
    connections over UDP and distributes them among the backend servers.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "UdpPolicyLbVirtualServer"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'access_log_enabled': 'access_log_enabled',
                            'ip_address': 'ip_address',
                            'lb_persistence_profile': 'lb_persistence_profile',
                            'ports': 'ports',
                            'router_path': 'router_path',
                            'traffic_source': 'traffic_source',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='UdpPolicyLbVirtualServer',
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 access_log_enabled=None,
                 ip_address=None,
                 lb_persistence_profile=None,
                 ports=None,
                 router_path=None,
                 traffic_source=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`PolicyLbVirtualServer.RESOURCE_TYPE_TCPPOLICYLBVIRTUALSERVER`
            *
              :attr:`PolicyLbVirtualServer.RESOURCE_TYPE_UDPPOLICYLBVIRTUALSERVER`
            *
              :attr:`PolicyLbVirtualServer.RESOURCE_TYPE_HTTPPOLICYLBVIRTUALSERVER`
            *
              :attr:`PolicyLbVirtualServer.RESOURCE_TYPE_HTTPSPOLICYLBVIRTUALSERVER`
            *
              :attr:`PolicyLbVirtualServer.RESOURCE_TYPE_CUSTOMPOLICYLBVIRTUALSERVER`
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  access_log_enabled: :class:`bool` or ``None``
        :param access_log_enabled: If access log is enabled, all HTTP requests sent to an L7 virtual
            server are logged to the access log file. Both successful requests
            (backend server returns 2xx) and unsuccessful requests (backend
            server returns 4xx or 5xx) are logged to access log, if enabled.
        :type  ip_address: :class:`str` or ``None``
        :param ip_address: Configures the IP address of the PolicyLbVirtualServer where it
            receives all client connections and distributes them among the
            backend servers. format: ip
        :type  lb_persistence_profile: :class:`str` or ``None``
        :param lb_persistence_profile: Path to optional object that enables persistence on a virtual
            server allowing related client connections to be sent to the same
            backend server. Persistence is disabled by default.
        :type  ports: :class:`list` of :class:`str` or ``None``
        :param ports: Ports contains a list of at least one port or port range such as
            \"80\", \"1234-1236\". Each port element in the list should be a
            single port or a single port range. format: port-or-range
        :type  router_path: :class:`str` or ``None``
        :param router_path: Path to router type object that PolicyLbVirtualServer connects to.
            The only supported router object is Network.
        :type  traffic_source: :class:`str` or ``None``
        :param traffic_source: 
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.access_log_enabled = access_log_enabled
        self.ip_address = ip_address
        self.lb_persistence_profile = lb_persistence_profile
        self.ports = ports
        self.router_path = router_path
        self.traffic_source = traffic_source
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

UdpPolicyLbVirtualServer._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.udp_policy_lb_virtual_server', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'access_log_enabled': type.OptionalType(type.BooleanType()),
        'ip_address': type.OptionalType(type.StringType()),
        'lb_persistence_profile': type.OptionalType(type.StringType()),
        'ports': type.OptionalType(type.ListType(type.StringType())),
        'router_path': type.OptionalType(type.StringType()),
        'traffic_source': type.OptionalType(type.StringType()),
    },
    UdpPolicyLbVirtualServer,
    False,
    None))



class UnaryOperation(VapiStruct):
    """
    Unary Operation.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    OPERATOR_APPEND = "APPEND"
    """


    """
    OPERATOR_SUBTRACT = "SUBTRACT"
    """


    """



    _canonical_to_pep_names = {
                            'operand': 'operand',
                            'operator': 'operator',
                            }

    def __init__(self,
                 operand=None,
                 operator=None,
                ):
        """
        :type  operand: :class:`ResourceFieldPointer` or ``None``
        :param operand: Represents an argument of the operation pointing to a specific
            field value.
        :type  operator: :class:`str` or ``None``
        :param operator: Possible values are: 
            
            * :attr:`UnaryOperation.OPERATOR_APPEND`
            * :attr:`UnaryOperation.OPERATOR_SUBTRACT`
            
             Logical Operator describing the operation to apply to the operand.
        """
        self.operand = operand
        self.operator = operator
        VapiStruct.__init__(self)


UnaryOperation._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.unary_operation', {
        'operand': type.OptionalType(type.ReferenceType(__name__, 'ResourceFieldPointer')),
        'operator': type.OptionalType(type.StringType()),
    },
    UnaryOperation,
    False,
    None))



class UnaryOperationBasedInjectionValue(VapiStruct):
    """
    Operation based Injection Value.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "UnaryOperationBasedInjectionValue"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'initial_value': 'initial_value',
                            'operation': 'operation',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 initial_value=None,
                 operation=None,
                 resource_type='UnaryOperationBasedInjectionValue',
                ):
        """
        :type  initial_value: :class:`ResourceFieldPointer` or ``None``
        :param initial_value: Resource field pointer representing the initial value for the
            injection value. If an operation is supplied, the value is handed
            to the operation function to produce a final result.
        :type  operation: :class:`UnaryOperation` or ``None``
        :param operation: Represents an optional operation to be done on the initial value.
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`InjectionValue.RESOURCE_TYPE_UNARYOPERATIONBASEDINJECTIONVALUE`
            
             Injection Value resource type.
        """
        self.initial_value = initial_value
        self.operation = operation
        self._resource_type = resource_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

UnaryOperationBasedInjectionValue._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.unary_operation_based_injection_value', {
        'initial_value': type.OptionalType(type.ReferenceType(__name__, 'ResourceFieldPointer')),
        'operation': type.OptionalType(type.ReferenceType(__name__, 'UnaryOperation')),
        'resource_type': type.StringType(),
    },
    UnaryOperationBasedInjectionValue,
    False,
    None))



class UnboundedKeyValuePair(VapiStruct):
    """
    A key-value pair with no limitations on size

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'key': 'key',
                            'value': 'value',
                            }

    def __init__(self,
                 key=None,
                 value=None,
                ):
        """
        :type  key: :class:`str` or ``None``
        :param key: Key
        :type  value: :class:`str` or ``None``
        :param value: Value
        """
        self.key = key
        self.value = value
        VapiStruct.__init__(self)


UnboundedKeyValuePair._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.unbounded_key_value_pair', {
        'key': type.OptionalType(type.StringType()),
        'value': type.OptionalType(type.StringType()),
    },
    UnboundedKeyValuePair,
    False,
    None))



class UrlAlias(VapiStruct):
    """
    Short name or alias of a url. It is used to represent the url.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'alias': 'alias',
                            'query': 'query',
                            'url': 'url',
                            }

    def __init__(self,
                 alias=None,
                 query=None,
                 url=None,
                ):
        """
        :type  alias: :class:`str` or ``None``
        :param alias: 
        :type  query: :class:`str` or ``None``
        :param query: Search query to be applied, if any. If query string is not
            provided, it will be ignored.
        :type  url: :class:`str` or ``None``
        :param url: Url to fetch data from.
        """
        self.alias = alias
        self.query = query
        self.url = url
        VapiStruct.__init__(self)


UrlAlias._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.url_alias', {
        'alias': type.OptionalType(type.StringType()),
        'query': type.OptionalType(type.StringType()),
        'url': type.OptionalType(type.StringType()),
    },
    UrlAlias,
    False,
    None))



class UserInfo(VapiStruct):
    """
    Authenticated User Info

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'roles': 'roles',
                            'user_name': 'user_name',
                            }

    def __init__(self,
                 roles=None,
                 user_name=None,
                ):
        """
        :type  roles: :class:`list` of :class:`NsxRole` or ``None``
        :param roles: Permissions
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  user_name: :class:`str` or ``None``
        :param user_name: User Name
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.roles = roles
        self.user_name = user_name
        VapiStruct.__init__(self)


UserInfo._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.user_info', {
        'roles': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'NsxRole'))),
        'user_name': type.OptionalType(type.StringType()),
    },
    UserInfo,
    False,
    None))



class UserSession(VapiStruct):
    """
    User login session information

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'domain_name': 'domain_name',
                            'login_time': 'login_time',
                            'logout_time': 'logout_time',
                            'user_name': 'user_name',
                            'user_session_id': 'user_session_id',
                            }

    def __init__(self,
                 domain_name=None,
                 login_time=None,
                 logout_time=None,
                 user_name=None,
                 user_session_id=None,
                ):
        """
        :type  domain_name: :class:`str` or ``None``
        :param domain_name: AD Domain of user.
        :type  login_time: :class:`long` or ``None``
        :param login_time: Login time. format: int64
        :type  logout_time: :class:`long` or ``None``
        :param logout_time: Logout time if applicable. An active user session has no logout
            time. format: int64
        :type  user_name: :class:`str` or ``None``
        :param user_name: AD user name.
        :type  user_session_id: :class:`long` or ``None``
        :param user_session_id: User session ID. This also indicates whether this is VDI / RDSH.
            format: int32
        """
        self.domain_name = domain_name
        self.login_time = login_time
        self.logout_time = logout_time
        self.user_name = user_name
        self.user_session_id = user_session_id
        VapiStruct.__init__(self)


UserSession._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.user_session', {
        'domain_name': type.OptionalType(type.StringType()),
        'login_time': type.OptionalType(type.IntegerType()),
        'logout_time': type.OptionalType(type.IntegerType()),
        'user_name': type.OptionalType(type.StringType()),
        'user_session_id': type.OptionalType(type.IntegerType()),
    },
    UserSession,
    False,
    None))



class ValueConstraintExpression(VapiStruct):
    """
    Represents the leaf level value constraint to constrain specified attribute
    value to the set of values to be allowed/not-allowed. Example -
    sourceGroups allowed to have only with list of groups. {
    \"operator\":\"INCLUDES\", \"values\":[\"/infra/services/HTTP\",
    \"/infra/services/HTTPS\"] }

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "ValueConstraintExpression"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    OPERATOR_INCLUDES = "INCLUDES"
    """


    """
    OPERATOR_EXCLUDES = "EXCLUDES"
    """


    """
    OPERATOR_EQUALS = "EQUALS"
    """


    """



    _canonical_to_pep_names = {
                            'operator': 'operator',
                            'values': 'values',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            }

    def __init__(self,
                 operator=None,
                 values=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='ValueConstraintExpression',
                 tags=None,
                ):
        """
        :type  operator: :class:`str` or ``None``
        :param operator: Possible values are: 
            
            * :attr:`ValueConstraintExpression.OPERATOR_INCLUDES`
            * :attr:`ValueConstraintExpression.OPERATOR_EXCLUDES`
            * :attr:`ValueConstraintExpression.OPERATOR_EQUALS`
            
            Operation to check for value list for resource attribute of
            constraint.
        :type  values: :class:`list` of :class:`str` or ``None``
        :param values: List of values.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            *
              :attr:`ConstraintExpression.RESOURCE_TYPE_VALUECONSTRAINTEXPRESSION`
            *
              :attr:`ConstraintExpression.RESOURCE_TYPE_RELATEDATTRIBUTECONDITIONALEXPRESSION`
            *
              :attr:`ConstraintExpression.RESOURCE_TYPE_ENTITYINSTANCECOUNTCONSTRAINTEXPRESSION`
            *
              :attr:`ConstraintExpression.RESOURCE_TYPE_FIELDSANITYCONSTRAINTEXPRESSION`
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        """
        self.operator = operator
        self.values = values
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

ValueConstraintExpression._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.value_constraint_expression', {
        'operator': type.OptionalType(type.StringType()),
        'values': type.OptionalType(type.ListType(type.StringType())),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
    },
    ValueConstraintExpression,
    False,
    None))



class VersionList(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'acceptable_versions': 'acceptable_versions',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 acceptable_versions=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  acceptable_versions: :class:`list` of :class:`str` or ``None``
        :param acceptable_versions: List of component versions
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.acceptable_versions = acceptable_versions
        VapiStruct.__init__(self)


VersionList._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.version_list', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'acceptable_versions': type.OptionalType(type.ListType(type.StringType())),
    },
    VersionList,
    False,
    None))



class Vhc(VapiStruct):
    """
    Virtual Hybrid Cloud is a construct that provides network isolation for all
    its contents out of the box. It can be considered to be an equivalent of a
    tenant in the networking world, where the compute and networking elements
    within are isolated from other VHCs. The VHC will also be used to provide
    hybridity across on-prem datacenters and the cloud, thus providing a means
    of building private clouds with elements both on-prem and in the cloud.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    CAPABILITIES_LOADBALANCER = "LoadBalancer"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'capabilities': 'capabilities',
                            'private_ip_addresses': 'private_ip_addresses',
                            'public_ip_addresses': 'public_ip_addresses',
                            'site_infos': 'site_infos',
                            'tier_0s': 'tier0s',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 capabilities=None,
                 private_ip_addresses=None,
                 public_ip_addresses=None,
                 site_infos=None,
                 tier0s=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  capabilities: :class:`list` of :class:`str` or ``None``
        :param capabilities: Possible values are: 
            
            * :attr:`Vhc.CAPABILITIES_LOADBALANCER`
            
            Type of Services to be made available for the applications defined
            under VHC.
        :type  private_ip_addresses: :class:`list` of :class:`str` or ``None``
        :param private_ip_addresses: This is set of IP addresses that will be used for Shared and
            Private Application tiers.
        :type  public_ip_addresses: :class:`list` of :class:`str` or ``None``
        :param public_ip_addresses: This is set of IP addresses that will be used for Public
            Application tiers.
        :type  site_infos: :class:`list` of :class:`SiteInfo` or ``None``
        :param site_infos: Information related to sites applicable for given VHC.
        :type  tier0s: :class:`list` of :class:`str` or ``None``
        :param tier0s: The tier 0 has to be pre-created before VHC is created. The tier 0
            typically provides connectivity to external world. List of sites
            for VHC has to be subset of sites where the tier 0 spans.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.capabilities = capabilities
        self.private_ip_addresses = private_ip_addresses
        self.public_ip_addresses = public_ip_addresses
        self.site_infos = site_infos
        self.tier0s = tier0s
        VapiStruct.__init__(self)


Vhc._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.vhc', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'capabilities': type.OptionalType(type.ListType(type.StringType())),
        'private_ip_addresses': type.OptionalType(type.ListType(type.StringType())),
        'public_ip_addresses': type.OptionalType(type.ListType(type.StringType())),
        'site_infos': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'SiteInfo'))),
        'tier_0s': type.OptionalType(type.ListType(type.StringType())),
    },
    Vhc,
    False,
    None))



class VhcDnsConfig(VapiStruct):
    """
    DNS configuration for the VHC.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'dns_upstream_servers': 'dns_upstream_servers',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 dns_upstream_servers=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  dns_upstream_servers: :class:`list` of :class:`str` or ``None``
        :param dns_upstream_servers: DNS servers to which the DNS request needs to be forwarded. format:
            ipv4
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.dns_upstream_servers = dns_upstream_servers
        VapiStruct.__init__(self)


VhcDnsConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.vhc_dns_config', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'dns_upstream_servers': type.OptionalType(type.ListType(type.StringType())),
    },
    VhcDnsConfig,
    False,
    None))



class VidmInfo(VapiStruct):
    """
    Vidm Info

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    TYPE_USER = "remote_user"
    """


    """
    TYPE_GROUP = "remote_group"
    """


    """



    _canonical_to_pep_names = {
                            'display_name': 'display_name',
                            'name': 'name',
                            'type': 'type',
                            }

    def __init__(self,
                 display_name=None,
                 name=None,
                 type=None,
                ):
        """
        :type  display_name: :class:`str` or ``None``
        :param display_name: User's Full Name Or User Group's Display Name
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  name: :class:`str` or ``None``
        :param name: Username Or Groupname
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  type: :class:`str` or ``None``
        :param type: Possible values are: 
            
            * :attr:`VidmInfo.TYPE_USER`
            * :attr:`VidmInfo.TYPE_GROUP`
            
             Type
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.display_name = display_name
        self.name = name
        self.type = type
        VapiStruct.__init__(self)


VidmInfo._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.vidm_info', {
        'display_name': type.OptionalType(type.StringType()),
        'name': type.OptionalType(type.StringType()),
        'type': type.OptionalType(type.StringType()),
    },
    VidmInfo,
    False,
    None))



class VidmInfoListResult(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`VidmInfo` or ``None``
        :param results: List results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


VidmInfoListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.vidm_info_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'VidmInfo'))),
    },
    VidmInfoListResult,
    False,
    None))



class View(VapiStruct):
    """
    Describes the configuration of a view to be displayed on the dashboard.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'exclude_roles': 'exclude_roles',
                            'include_roles': 'include_roles',
                            'shared': 'shared',
                            'weight': 'weight',
                            'widgets': 'widgets',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 exclude_roles=None,
                 include_roles=None,
                 shared=None,
                 weight=None,
                 widgets=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Title of the widget.
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  exclude_roles: :class:`str` or ``None``
        :param exclude_roles: Comma separated list of roles to which the shared view is not
            visible. Allows user to prevent the visibility of a shared view to
            the specified roles. User defined roles can also be specified in
            the list. The roles can be obtained via GET /api/v1/aaa/roles.
            Please visit API documentation for details about roles. If
            include_roles is specified then exclude_roles cannot be specified.
        :type  include_roles: :class:`str` or ``None``
        :param include_roles: Comma separated list of roles to which the shared view is visible.
            Allows user to specify the visibility of a shared view to the
            specified roles. User defined roles can also be specified in the
            list. The roles can be obtained via GET /api/v1/aaa/roles. Please
            visit API documentation for details about roles.
        :type  shared: :class:`bool` or ``None``
        :param shared: Defaults to false. Set to true to publish the view to other users.
            The widgets of a shared view are visible to other users.
        :type  weight: :class:`long` or ``None``
        :param weight: Determines placement of view relative to other views. The lower the
            weight, the higher it is in the placement order. format: int32
        :type  widgets: :class:`list` of :class:`WidgetItem` or ``None``
        :param widgets: Array of widgets that are part of the view.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.exclude_roles = exclude_roles
        self.include_roles = include_roles
        self.shared = shared
        self.weight = weight
        self.widgets = widgets
        VapiStruct.__init__(self)


View._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.view', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'exclude_roles': type.OptionalType(type.StringType()),
        'include_roles': type.OptionalType(type.StringType()),
        'shared': type.OptionalType(type.BooleanType()),
        'weight': type.OptionalType(type.IntegerType()),
        'widgets': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'WidgetItem'))),
    },
    View,
    False,
    None))



class ViewList(VapiStruct):
    """
    Represents a list of views.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'views': 'views',
                            }

    def __init__(self,
                 views=None,
                ):
        """
        :type  views: :class:`list` of :class:`View` or ``None``
        :param views: Array of views
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.views = views
        VapiStruct.__init__(self)


ViewList._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.view_list', {
        'views': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'View'))),
    },
    ViewList,
    False,
    None))



class VirtualEndpoint(VapiStruct):
    """
    A VirtualEndpoint represents an IP (or nexthop) which is outside SDDC. It
    represents a redirection target for RedirectionPolicy.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "VirtualEndpoint"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'service_names': 'service_names',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'target_ips': 'target_ips',
                            }

    def __init__(self,
                 service_names=None,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='VirtualEndpoint',
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 target_ips=None,
                ):
        """
        :type  service_names: :class:`list` of :class:`str` or ``None``
        :param service_names: One VirtualEndpoint will be created per service name.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`BaseEndpoint.RESOURCE_TYPE_VIRTUALENDPOINT`
            * :attr:`BaseEndpoint.RESOURCE_TYPE_SERVICEINSTANCEENDPOINT`
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  target_ips: :class:`list` of :class:`IPInfo` or ``None``
        :param target_ips: IPs where either inbound or outbound traffic is to be redirected.
        """
        self.service_names = service_names
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.target_ips = target_ips
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

VirtualEndpoint._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.virtual_endpoint', {
        'service_names': type.OptionalType(type.ListType(type.StringType())),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'target_ips': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'IPInfo'))),
    },
    VirtualEndpoint,
    False,
    None))



class VirtualEndpointListResult(VapiStruct):
    """
    Collection of vitual endpoints under a Tier0

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`VirtualEndpoint` or ``None``
        :param results: All virtual endpoints under a Tier0
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


VirtualEndpointListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.virtual_endpoint_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'VirtualEndpoint'))),
    },
    VirtualEndpointListResult,
    False,
    None))



class VirtualMachine(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "VirtualMachine"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    POWER_STATE_VM_RUNNING = "VM_RUNNING"
    """


    """
    POWER_STATE_VM_STOPPED = "VM_STOPPED"
    """


    """
    POWER_STATE_VM_SUSPENDED = "VM_SUSPENDED"
    """


    """
    POWER_STATE_UNKNOWN = "UNKNOWN"
    """


    """
    TYPE_EDGE = "EDGE"
    """


    """
    TYPE_SERVICE = "SERVICE"
    """


    """
    TYPE_REGULAR = "REGULAR"
    """


    """



    _canonical_to_pep_names = {
                            'compute_ids': 'compute_ids',
                            'external_id': 'external_id',
                            'guest_info': 'guest_info',
                            'host_id': 'host_id',
                            'local_id_on_host': 'local_id_on_host',
                            'power_state': 'power_state',
                            'source': 'source',
                            'type': 'type',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_last_sync_time': 'last_sync_time',
                            'description': 'description',
                            'display_name': 'display_name',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            }

    def __init__(self,
                 compute_ids=None,
                 external_id=None,
                 guest_info=None,
                 host_id=None,
                 local_id_on_host=None,
                 power_state=None,
                 source=None,
                 type=None,
                 links=None,
                 schema=None,
                 self_=None,
                 last_sync_time=None,
                 description=None,
                 display_name=None,
                 resource_type='VirtualMachine',
                 tags=None,
                ):
        """
        :type  compute_ids: :class:`list` of :class:`str` or ``None``
        :param compute_ids: List of external compute ids of the virtual machine in the format
            'id-type-key:value' , list of external compute ids
            ['uuid:xxxx-xxxx-xxxx-xxxx', 'moIdOnHost:moref-11',
            'instanceUuid:xxxx-xxxx-xxxx-xxxx']
        :type  external_id: :class:`str` or ``None``
        :param external_id: Current external id of this virtual machine in the system.
        :type  guest_info: :class:`GuestInfo` or ``None``
        :param guest_info: Guest virtual machine details include OS name, computer name of
            guest VM. Currently this is supported for guests on ESXi that have
            VMware Tools installed.
        :type  host_id: :class:`str` or ``None``
        :param host_id: Id of the host in which this virtual machine exists.
        :type  local_id_on_host: :class:`str` or ``None``
        :param local_id_on_host: Id of the vm unique within the host.
        :type  power_state: :class:`str` or ``None``
        :param power_state: Possible values are: 
            
            * :attr:`VirtualMachine.POWER_STATE_VM_RUNNING`
            * :attr:`VirtualMachine.POWER_STATE_VM_STOPPED`
            * :attr:`VirtualMachine.POWER_STATE_VM_SUSPENDED`
            * :attr:`VirtualMachine.POWER_STATE_UNKNOWN`
            
             Current power state of this virtual machine in the system.
        :type  source: :class:`ResourceReference` or ``None``
        :param source: Reference of the Host or Public Cloud Gateway that reported the VM
        :type  type: :class:`str` or ``None``
        :param type: Possible values are: 
            
            * :attr:`VirtualMachine.TYPE_EDGE`
            * :attr:`VirtualMachine.TYPE_SERVICE`
            * :attr:`VirtualMachine.TYPE_REGULAR`
            
             Virtual Machine type; Edge, Service VM or other.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  last_sync_time: :class:`long` or ``None``
        :param last_sync_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  resource_type: :class:`str`
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        """
        self.compute_ids = compute_ids
        self.external_id = external_id
        self.guest_info = guest_info
        self.host_id = host_id
        self.local_id_on_host = local_id_on_host
        self.power_state = power_state
        self.source = source
        self.type = type
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.last_sync_time = last_sync_time
        self.description = description
        self.display_name = display_name
        self._resource_type = resource_type
        self.tags = tags
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

VirtualMachine._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.virtual_machine', {
        'compute_ids': type.OptionalType(type.ListType(type.StringType())),
        'external_id': type.OptionalType(type.StringType()),
        'guest_info': type.OptionalType(type.ReferenceType(__name__, 'GuestInfo')),
        'host_id': type.OptionalType(type.StringType()),
        'local_id_on_host': type.OptionalType(type.StringType()),
        'power_state': type.OptionalType(type.StringType()),
        'source': type.OptionalType(type.ReferenceType(__name__, 'ResourceReference')),
        'type': type.OptionalType(type.StringType()),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_last_sync_time': type.OptionalType(type.IntegerType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
    },
    VirtualMachine,
    False,
    None))



class VirtualMachineDetails(VapiStruct):
    """
    Virtual Machine Details

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'active_sessions': 'active_sessions',
                            'archived_sessions': 'archived_sessions',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 active_sessions=None,
                 archived_sessions=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  active_sessions: :class:`list` of :class:`UserSession` or ``None``
        :param active_sessions: List of active (still logged in) user login/session data (no
            limit).
        :type  archived_sessions: :class:`list` of :class:`UserSession` or ``None``
        :param archived_sessions: Optional list of up to 5 most recent archived (previously logged
            in) user login/session data.
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.active_sessions = active_sessions
        self.archived_sessions = archived_sessions
        VapiStruct.__init__(self)


VirtualMachineDetails._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.virtual_machine_details', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'active_sessions': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'UserSession'))),
        'archived_sessions': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'UserSession'))),
    },
    VirtualMachineDetails,
    False,
    None))



class VirtualMachineListResult(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`VirtualMachine` or ``None``
        :param results: VirtualMachine list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


VirtualMachineListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.virtual_machine_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'VirtualMachine'))),
    },
    VirtualMachineListResult,
    False,
    None))



class VirtualMachineTagsUpdate(VapiStruct):
    """
    List of tags applied to the virtual machine. Based on the enforcement
    point, the virtual_machine_id will be different. It could be an external id
    for NSX T or a moid for NSX V

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'tags': 'tags',
                            'virtual_machine_id': 'virtual_machine_id',
                            }

    def __init__(self,
                 tags=None,
                 virtual_machine_id=None,
                ):
        """
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: List of tags to be applied on the virtual machine
        :type  virtual_machine_id: :class:`str` or ``None``
        :param virtual_machine_id: The identifier that is used in the enforcement point that uniquely
            identifies the virtual machine. In case of NSXT it would be the
            value of the external_id of the virtual machine.
        """
        self.tags = tags
        self.virtual_machine_id = virtual_machine_id
        VapiStruct.__init__(self)


VirtualMachineTagsUpdate._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.virtual_machine_tags_update', {
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'virtual_machine_id': type.OptionalType(type.StringType()),
    },
    VirtualMachineTagsUpdate,
    False,
    None))



class VirtualNetworkInterface(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "VirtualNetworkInterface"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    OWNER_VM_TYPE_EDGE = "EDGE"
    """


    """
    OWNER_VM_TYPE_SERVICE = "SERVICE"
    """


    """
    OWNER_VM_TYPE_REGULAR = "REGULAR"
    """


    """



    _canonical_to_pep_names = {
                            'device_key': 'device_key',
                            'device_name': 'device_name',
                            'external_id': 'external_id',
                            'host_id': 'host_id',
                            'ip_address_info': 'ip_address_info',
                            'lport_attachment_id': 'lport_attachment_id',
                            'mac_address': 'mac_address',
                            'owner_vm_id': 'owner_vm_id',
                            'owner_vm_type': 'owner_vm_type',
                            'vm_local_id_on_host': 'vm_local_id_on_host',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_last_sync_time': 'last_sync_time',
                            'description': 'description',
                            'display_name': 'display_name',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            }

    def __init__(self,
                 device_key=None,
                 device_name=None,
                 external_id=None,
                 host_id=None,
                 ip_address_info=None,
                 lport_attachment_id=None,
                 mac_address=None,
                 owner_vm_id=None,
                 owner_vm_type=None,
                 vm_local_id_on_host=None,
                 links=None,
                 schema=None,
                 self_=None,
                 last_sync_time=None,
                 description=None,
                 display_name=None,
                 resource_type='VirtualNetworkInterface',
                 tags=None,
                ):
        """
        :type  device_key: :class:`str` or ``None``
        :param device_key: Device key of the virtual network interface.
        :type  device_name: :class:`str` or ``None``
        :param device_name: Device name of the virtual network interface.
        :type  external_id: :class:`str` or ``None``
        :param external_id: External Id of the virtual network inferface.
        :type  host_id: :class:`str` or ``None``
        :param host_id: Id of the host on which the vm exists.
        :type  ip_address_info: :class:`list` of :class:`IpAddressInfo` or ``None``
        :param ip_address_info: IP Addresses of the the virtual network interface, from various
            sources.
        :type  lport_attachment_id: :class:`str` or ``None``
        :param lport_attachment_id: LPort Attachment Id of the virtual network interface.
        :type  mac_address: :class:`str` or ``None``
        :param mac_address: MAC address of the virtual network interface.
        :type  owner_vm_id: :class:`str` or ``None``
        :param owner_vm_id: Id of the vm to which this virtual network interface belongs.
        :type  owner_vm_type: :class:`str` or ``None``
        :param owner_vm_type: Possible values are: 
            
            * :attr:`VirtualNetworkInterface.OWNER_VM_TYPE_EDGE`
            * :attr:`VirtualNetworkInterface.OWNER_VM_TYPE_SERVICE`
            * :attr:`VirtualNetworkInterface.OWNER_VM_TYPE_REGULAR`
            
             Owner virtual machine type; Edge, Service VM or other.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  vm_local_id_on_host: :class:`str` or ``None``
        :param vm_local_id_on_host: Id of the vm unique within the host.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  last_sync_time: :class:`long` or ``None``
        :param last_sync_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  resource_type: :class:`str`
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        """
        self.device_key = device_key
        self.device_name = device_name
        self.external_id = external_id
        self.host_id = host_id
        self.ip_address_info = ip_address_info
        self.lport_attachment_id = lport_attachment_id
        self.mac_address = mac_address
        self.owner_vm_id = owner_vm_id
        self.owner_vm_type = owner_vm_type
        self.vm_local_id_on_host = vm_local_id_on_host
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.last_sync_time = last_sync_time
        self.description = description
        self.display_name = display_name
        self._resource_type = resource_type
        self.tags = tags
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

VirtualNetworkInterface._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.virtual_network_interface', {
        'device_key': type.OptionalType(type.StringType()),
        'device_name': type.OptionalType(type.StringType()),
        'external_id': type.OptionalType(type.StringType()),
        'host_id': type.OptionalType(type.StringType()),
        'ip_address_info': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'IpAddressInfo'))),
        'lport_attachment_id': type.OptionalType(type.StringType()),
        'mac_address': type.OptionalType(type.StringType()),
        'owner_vm_id': type.OptionalType(type.StringType()),
        'owner_vm_type': type.OptionalType(type.StringType()),
        'vm_local_id_on_host': type.OptionalType(type.StringType()),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_last_sync_time': type.OptionalType(type.IntegerType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
    },
    VirtualNetworkInterface,
    False,
    None))



class VirtualNetworkInterfaceListResult(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`VirtualNetworkInterface` or ``None``
        :param results: VirtualNetworkInterface list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


VirtualNetworkInterfaceListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.virtual_network_interface_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'VirtualNetworkInterface'))),
    },
    VirtualNetworkInterfaceListResult,
    False,
    None))



class VirtualPortgroup(VapiStruct):
    """
    Virtual portgroup on a virtual switch

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "VirtualPortgroup"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'cm_local_id': 'cm_local_id',
                            'external_id': 'external_id',
                            'origin_type': 'origin_type',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_last_sync_time': 'last_sync_time',
                            'description': 'description',
                            'display_name': 'display_name',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            }

    def __init__(self,
                 cm_local_id=None,
                 external_id=None,
                 origin_type=None,
                 links=None,
                 schema=None,
                 self_=None,
                 last_sync_time=None,
                 description=None,
                 display_name=None,
                 resource_type='VirtualPortgroup',
                 tags=None,
                ):
        """
        :type  cm_local_id: :class:`str` or ``None``
        :param cm_local_id: Id of the portgroup, eg. a mo-ref from VC.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  external_id: :class:`str` or ``None``
        :param external_id: External id of the virtual portgroup
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  origin_type: :class:`str` or ``None``
        :param origin_type: Portgroup type like DistributedVirtualPortgroup
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  last_sync_time: :class:`long` or ``None``
        :param last_sync_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  resource_type: :class:`str`
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        """
        self.cm_local_id = cm_local_id
        self.external_id = external_id
        self.origin_type = origin_type
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.last_sync_time = last_sync_time
        self.description = description
        self.display_name = display_name
        self._resource_type = resource_type
        self.tags = tags
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

VirtualPortgroup._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.virtual_portgroup', {
        'cm_local_id': type.OptionalType(type.StringType()),
        'external_id': type.OptionalType(type.StringType()),
        'origin_type': type.OptionalType(type.StringType()),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_last_sync_time': type.OptionalType(type.IntegerType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
    },
    VirtualPortgroup,
    False,
    None))



class VirtualSwitch(VapiStruct):
    """
    Virtual switch on a compute manager

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "VirtualSwitch"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'cm_local_id': 'cm_local_id',
                            'external_id': 'external_id',
                            'origin_id': 'origin_id',
                            'origin_type': 'origin_type',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_last_sync_time': 'last_sync_time',
                            'description': 'description',
                            'display_name': 'display_name',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            }

    def __init__(self,
                 cm_local_id=None,
                 external_id=None,
                 origin_id=None,
                 origin_type=None,
                 links=None,
                 schema=None,
                 self_=None,
                 last_sync_time=None,
                 description=None,
                 display_name=None,
                 resource_type='VirtualSwitch',
                 tags=None,
                ):
        """
        :type  cm_local_id: :class:`str` or ``None``
        :param cm_local_id: ID of the virtual switch in compute manager
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  external_id: :class:`str` or ``None``
        :param external_id: External id of the virtual switch
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  origin_id: :class:`str` or ``None``
        :param origin_id: ID of the compute manager where this virtual switch is discovered.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  origin_type: :class:`str` or ``None``
        :param origin_type: Switch type like VmwareDistributedVirtualSwitch
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  last_sync_time: :class:`long` or ``None``
        :param last_sync_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  resource_type: :class:`str`
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        """
        self.cm_local_id = cm_local_id
        self.external_id = external_id
        self.origin_id = origin_id
        self.origin_type = origin_type
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.last_sync_time = last_sync_time
        self.description = description
        self.display_name = display_name
        self._resource_type = resource_type
        self.tags = tags
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

VirtualSwitch._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.virtual_switch', {
        'cm_local_id': type.OptionalType(type.StringType()),
        'external_id': type.OptionalType(type.StringType()),
        'origin_id': type.OptionalType(type.StringType()),
        'origin_type': type.OptionalType(type.StringType()),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_last_sync_time': type.OptionalType(type.IntegerType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
    },
    VirtualSwitch,
    False,
    None))



class VmToolsInfo(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "VmToolsInfo"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    VM_TYPE_EDGE = "EDGE"
    """


    """
    VM_TYPE_SERVICE = "SERVICE"
    """


    """
    VM_TYPE_REGULAR = "REGULAR"
    """


    """



    _canonical_to_pep_names = {
                            'external_id': 'external_id',
                            'file_agent_version': 'file_agent_version',
                            'host_local_id': 'host_local_id',
                            'network_agent_version': 'network_agent_version',
                            'source': 'source',
                            'tools_version': 'tools_version',
                            'vm_type': 'vm_type',
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_last_sync_time': 'last_sync_time',
                            'description': 'description',
                            'display_name': 'display_name',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            }

    def __init__(self,
                 external_id=None,
                 file_agent_version=None,
                 host_local_id=None,
                 network_agent_version=None,
                 source=None,
                 tools_version=None,
                 vm_type=None,
                 links=None,
                 schema=None,
                 self_=None,
                 last_sync_time=None,
                 description=None,
                 display_name=None,
                 resource_type='VmToolsInfo',
                 tags=None,
                ):
        """
        :type  external_id: :class:`str` or ``None``
        :param external_id: Current external id of this virtual machine in the system.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  file_agent_version: :class:`str` or ``None``
        :param file_agent_version: Version of file agent on the VM of a third party partner solution.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  host_local_id: :class:`str` or ``None``
        :param host_local_id: Id of the VM which is assigned locally by the host. It is the
            VM-moref on ESXi hosts, in other environments it is VM UUID.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  network_agent_version: :class:`str` or ``None``
        :param network_agent_version: Version of network agent on the VM of a third party partner
            solution.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  source: :class:`ResourceReference` or ``None``
        :param source: Reference of the Host or Public Cloud Gateway that reported the VM.
        :type  tools_version: :class:`str` or ``None``
        :param tools_version: Version of VMTools installed on the VM.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  vm_type: :class:`str` or ``None``
        :param vm_type: Possible values are: 
            
            * :attr:`VmToolsInfo.VM_TYPE_EDGE`
            * :attr:`VmToolsInfo.VM_TYPE_SERVICE`
            * :attr:`VmToolsInfo.VM_TYPE_REGULAR`
            
             Type of VM - Edge, Service or other.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  last_sync_time: :class:`long` or ``None``
        :param last_sync_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  resource_type: :class:`str`
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        """
        self.external_id = external_id
        self.file_agent_version = file_agent_version
        self.host_local_id = host_local_id
        self.network_agent_version = network_agent_version
        self.source = source
        self.tools_version = tools_version
        self.vm_type = vm_type
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.last_sync_time = last_sync_time
        self.description = description
        self.display_name = display_name
        self._resource_type = resource_type
        self.tags = tags
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

VmToolsInfo._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.vm_tools_info', {
        'external_id': type.OptionalType(type.StringType()),
        'file_agent_version': type.OptionalType(type.StringType()),
        'host_local_id': type.OptionalType(type.StringType()),
        'network_agent_version': type.OptionalType(type.StringType()),
        'source': type.OptionalType(type.ReferenceType(__name__, 'ResourceReference')),
        'tools_version': type.OptionalType(type.StringType()),
        'vm_type': type.OptionalType(type.StringType()),
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_last_sync_time': type.OptionalType(type.IntegerType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
    },
    VmToolsInfo,
    False,
    None))



class VniPoolConfig(VapiStruct):
    """
    Vni Pool Configuration.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'end': 'end',
                            'start': 'start',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 end=None,
                 start=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  end: :class:`long` or ``None``
        :param end: End value of VNI Pool range format: int32
        :type  start: :class:`long` or ``None``
        :param start: Start value of VNI Pool range format: int32
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.end = end
        self.start = start
        VapiStruct.__init__(self)


VniPoolConfig._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.vni_pool_config', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'end': type.OptionalType(type.IntegerType()),
        'start': type.OptionalType(type.IntegerType()),
    },
    VniPoolConfig,
    False,
    None))



class VniPoolConfigListResult(VapiStruct):
    """
    Collection of Vni Pool Configuration.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            'cursor': 'cursor',
                            'result_count': 'result_count',
                            'sort_ascending': 'sort_ascending',
                            'sort_by': 'sort_by',
                            'results': 'results',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 cursor=None,
                 result_count=None,
                 sort_ascending=None,
                 sort_by=None,
                 results=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  cursor: :class:`str` or ``None``
        :param cursor: Opaque cursor to be used for getting next page of records (supplied
            by current result page)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  result_count: :class:`long` or ``None``
        :param result_count: Count of results found (across all pages), set only on first page
            format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_ascending: :class:`bool` or ``None``
        :param sort_ascending: If true, results are sorted in ascending order
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  sort_by: :class:`str` or ``None``
        :param sort_by: Field by which records are sorted
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  results: :class:`list` of :class:`VniPoolConfig` or ``None``
        :param results: Vni Pool Config list results
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.cursor = cursor
        self.result_count = result_count
        self.sort_ascending = sort_ascending
        self.sort_by = sort_by
        self.results = results
        VapiStruct.__init__(self)


VniPoolConfigListResult._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.vni_pool_config_list_result', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        'cursor': type.OptionalType(type.StringType()),
        'result_count': type.OptionalType(type.IntegerType()),
        'sort_ascending': type.OptionalType(type.BooleanType()),
        'sort_by': type.OptionalType(type.StringType()),
        'results': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'VniPoolConfig'))),
    },
    VniPoolConfigListResult,
    False,
    None))



class VrfRouteTargets(VapiStruct):
    """
    Vrf Route Targets for import/export.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    ADDRESS_FAMILY_EVPN = "L2VPN_EVPN"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'parent_path': 'parent_path',
                            'path': 'path',
                            'relative_path': 'relative_path',
                            'unique_id': 'unique_id',
                            'children': 'children',
                            'marked_for_delete': 'marked_for_delete',
                            'overridden': 'overridden',
                            'address_family': 'address_family',
                            'export_route_targets': 'export_route_targets',
                            'import_route_targets': 'import_route_targets',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type=None,
                 tags=None,
                 parent_path=None,
                 path=None,
                 relative_path=None,
                 unique_id=None,
                 children=None,
                 marked_for_delete=None,
                 overridden=None,
                 address_family=None,
                 export_route_targets=None,
                 import_route_targets=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Defaults to ID if not set
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str` or ``None``
        :param resource_type: The type of this resource.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  parent_path: :class:`str` or ``None``
        :param parent_path: Path of its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  path: :class:`str` or ``None``
        :param path: Absolute path of this object
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  relative_path: :class:`str` or ``None``
        :param relative_path: Path relative from its parent
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  unique_id: :class:`str` or ``None``
        :param unique_id: This is a UUID generated by the GM/LM to uniquely identify entites
            in a federated environment. For entities that are stretched across
            multiple sites, the same ID will be used on all the stretched
            sites.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  children: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param children: subtree for this type within policy tree containing nested
            elements.
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`ChildPolicyConfigResource`. When methods return a value of
            this class as a return value, the attribute will contain all the
            attributes defined in :class:`ChildPolicyConfigResource`.
        :type  marked_for_delete: :class:`bool` or ``None``
        :param marked_for_delete: Intent objects are not directly deleted from the system when a
            delete is invoked on them. They are marked for deletion and only
            when all the realized entities for that intent object gets deleted,
            the intent object is deleted. Objects that are marked for deletion
            are not returned in GET call. One can use the search API to get
            these objects.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  overridden: :class:`bool` or ``None``
        :param overridden: Global intent objects cannot be modified by the user. However,
            certain global intent objects can be overridden locally by use of
            this property. In such cases, the overridden local values take
            precedence over the globally defined values for the properties.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  address_family: :class:`str` or ``None``
        :param address_family: Possible values are: 
            
            * :attr:`VrfRouteTargets.ADDRESS_FAMILY_EVPN`
            
             Address family.
        :type  export_route_targets: :class:`list` of :class:`str` or ``None``
        :param export_route_targets: 
        :type  import_route_targets: :class:`list` of :class:`str` or ``None``
        :param import_route_targets: 
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self.resource_type = resource_type
        self.tags = tags
        self.parent_path = parent_path
        self.path = path
        self.relative_path = relative_path
        self.unique_id = unique_id
        self.children = children
        self.marked_for_delete = marked_for_delete
        self.overridden = overridden
        self.address_family = address_family
        self.export_route_targets = export_route_targets
        self.import_route_targets = import_route_targets
        VapiStruct.__init__(self)


VrfRouteTargets._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.vrf_route_targets', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.OptionalType(type.StringType()),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'parent_path': type.OptionalType(type.StringType()),
        'path': type.OptionalType(type.StringType()),
        'relative_path': type.OptionalType(type.StringType()),
        'unique_id': type.OptionalType(type.StringType()),
        'children': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'ChildPolicyConfigResource')]))),
        'marked_for_delete': type.OptionalType(type.BooleanType()),
        'overridden': type.OptionalType(type.BooleanType()),
        'address_family': type.OptionalType(type.StringType()),
        'export_route_targets': type.OptionalType(type.ListType(type.StringType())),
        'import_route_targets': type.OptionalType(type.ListType(type.StringType())),
    },
    VrfRouteTargets,
    False,
    None))



class WeeklyBackupSchedule(VapiStruct):
    """
    Schedule to specify day of the week and time to take automated backup

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "WeeklyBackupSchedule"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """



    _canonical_to_pep_names = {
                            'days_of_week': 'days_of_week',
                            'hour_of_day': 'hour_of_day',
                            'minute_of_day': 'minute_of_day',
                            'resource_type': 'resource_type',
                            }

    def __init__(self,
                 days_of_week=None,
                 hour_of_day=None,
                 minute_of_day=None,
                 resource_type='WeeklyBackupSchedule',
                ):
        """
        :type  days_of_week: :class:`list` of :class:`long` or ``None``
        :param days_of_week: Days of week when backup is taken. 0 - Sunday, 1 - Monday, 2 -
            Tuesday, 3 - Wednesday ... format: int64
        :type  hour_of_day: :class:`long` or ``None``
        :param hour_of_day: Time of day when backup is taken format: int64
        :type  minute_of_day: :class:`long` or ``None``
        :param minute_of_day: Time of day when backup is taken format: int64
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`BackupSchedule.RESOURCE_TYPE_WEEKLYBACKUPSCHEDULE`
            * :attr:`BackupSchedule.RESOURCE_TYPE_INTERVALBACKUPSCHEDULE`
            
             Schedule type
        """
        self.days_of_week = days_of_week
        self.hour_of_day = hour_of_day
        self.minute_of_day = minute_of_day
        self._resource_type = resource_type
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

WeeklyBackupSchedule._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.weekly_backup_schedule', {
        'days_of_week': type.OptionalType(type.ListType(type.IntegerType())),
        'hour_of_day': type.OptionalType(type.IntegerType()),
        'minute_of_day': type.OptionalType(type.IntegerType()),
        'resource_type': type.StringType(),
    },
    WeeklyBackupSchedule,
    False,
    None))



class WidgetConfiguration(VapiStruct):
    """
    Describes the configuration of a widget to be displayed on the dashboard.
    WidgetConfiguration is a base type that provides attributes of a widget
    in-general.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    _TYPE_IDENTIFIER = "WidgetConfiguration"
    """
    Identifier denoting this class, when it is used in polymorphic context. 

    This value should be assigned to the attribute which is used to discriminate
    the actual type used in the polymorphic context.

    """
    RESOURCE_TYPE_LABELVALUECONFIGURATION = "LabelValueConfiguration"
    """


    """
    RESOURCE_TYPE_DONUTCONFIGURATION = "DonutConfiguration"
    """


    """
    RESOURCE_TYPE_MULTIWIDGETCONFIGURATION = "MultiWidgetConfiguration"
    """


    """
    RESOURCE_TYPE_CONTAINERCONFIGURATION = "ContainerConfiguration"
    """


    """
    RESOURCE_TYPE_STATSCONFIGURATION = "StatsConfiguration"
    """


    """
    RESOURCE_TYPE_GRIDCONFIGURATION = "GridConfiguration"
    """


    """
    RESOURCE_TYPE_GRAPHCONFIGURATION = "GraphConfiguration"
    """


    """
    RESOURCE_TYPE_CUSTOMWIDGETCONFIGURATION = "CustomWidgetConfiguration"
    """


    """
    RESOURCE_TYPE_DROPDOWNFILTERWIDGETCONFIGURATION = "DropdownFilterWidgetConfiguration"
    """


    """



    _canonical_to_pep_names = {
                            '_links': 'links',
                            '_schema': 'schema',
                            '_self': 'self_',
                            '_revision': 'revision',
                            '_create_time': 'create_time',
                            '_create_user': 'create_user',
                            '_last_modified_time': 'last_modified_time',
                            '_last_modified_user': 'last_modified_user',
                            '_protection': 'protection',
                            '_system_owned': 'system_owned',
                            'description': 'description',
                            'display_name': 'display_name',
                            'id': 'id',
                            'resource_type': 'resource_type',
                            'tags': 'tags',
                            'datasources': 'datasources',
                            'default_filter_value': 'default_filter_value',
                            'drilldown_id': 'drilldown_id',
                            'filter': 'filter',
                            'filter_value_required': 'filter_value_required',
                            'footer': 'footer',
                            'icons': 'icons',
                            'is_drilldown': 'is_drilldown',
                            'legend': 'legend',
                            'shared': 'shared',
                            'span': 'span',
                            'weight': 'weight',
                            }

    def __init__(self,
                 links=None,
                 schema=None,
                 self_=None,
                 revision=None,
                 create_time=None,
                 create_user=None,
                 last_modified_time=None,
                 last_modified_user=None,
                 protection=None,
                 system_owned=None,
                 description=None,
                 display_name=None,
                 id=None,
                 resource_type='WidgetConfiguration',
                 tags=None,
                 datasources=None,
                 default_filter_value=None,
                 drilldown_id=None,
                 filter=None,
                 filter_value_required=None,
                 footer=None,
                 icons=None,
                 is_drilldown=None,
                 legend=None,
                 shared=None,
                 span=None,
                 weight=None,
                ):
        """
        :type  links: :class:`list` of :class:`ResourceLink` or ``None``
        :param links: The server will populate this field when returing the resource.
            Ignored on PUT and POST.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  schema: :class:`str` or ``None``
        :param schema: Schema for this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  self_: :class:`SelfResourceLink` or ``None``
        :param self_: Link to this resource
        :type  revision: :class:`long` or ``None``
        :param revision: The _revision property describes the current revision of the
            resource. To prevent clients from overwriting each other's changes,
            PUT operations must include the current _revision of the resource,
            which clients should obtain by issuing a GET operation. If the
            _revision provided in a PUT request is missing or stale, the
            operation will be rejected. format: int32
        :type  create_time: :class:`long` or ``None``
        :param create_time: Timestamp of resource creation format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  create_user: :class:`str` or ``None``
        :param create_user: ID of the user who created this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_time: :class:`long` or ``None``
        :param last_modified_time: Timestamp of last modification format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  last_modified_user: :class:`str` or ``None``
        :param last_modified_user: ID of the user who last modified this resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  protection: :class:`str` or ``None``
        :param protection: Protection status is one of the following: PROTECTED - the client
            who retrieved the entity is not allowed to modify it. NOT_PROTECTED
            - the client who retrieved the entity is allowed to modify it
            REQUIRE_OVERRIDE - the client who retrieved the entity is a super
            user and can modify it, but only when providing the request header
            X-Allow-Overwrite=true. UNKNOWN - the _protection field could not
            be determined for this entity.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  system_owned: :class:`bool` or ``None``
        :param system_owned: Indicates system owned resource
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  description: :class:`str` or ``None``
        :param description: Description of this resource
        :type  display_name: :class:`str` or ``None``
        :param display_name: Title of the widget. If display_name is omitted, the widget will be
            shown without a title.
        :type  id: :class:`str` or ``None``
        :param id: Unique identifier of this resource
        :type  resource_type: :class:`str`
        :param resource_type: Possible values are: 
            
            * :attr:`WidgetConfiguration.RESOURCE_TYPE_LABELVALUECONFIGURATION`
            * :attr:`WidgetConfiguration.RESOURCE_TYPE_DONUTCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_MULTIWIDGETCONFIGURATION`
            * :attr:`WidgetConfiguration.RESOURCE_TYPE_CONTAINERCONFIGURATION`
            * :attr:`WidgetConfiguration.RESOURCE_TYPE_STATSCONFIGURATION`
            * :attr:`WidgetConfiguration.RESOURCE_TYPE_GRIDCONFIGURATION`
            * :attr:`WidgetConfiguration.RESOURCE_TYPE_GRAPHCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_CUSTOMWIDGETCONFIGURATION`
            *
              :attr:`WidgetConfiguration.RESOURCE_TYPE_DROPDOWNFILTERWIDGETCONFIGURATION`
            
            Supported visualization types are LabelValueConfiguration,
            DonutConfiguration, GridConfiguration, StatsConfiguration,
            MultiWidgetConfiguration, GraphConfiguration,
            ContainerConfiguration, CustomWidgetConfiguration and
            DropdownFilterWidgetConfiguration.
        :type  tags: :class:`list` of :class:`Tag` or ``None``
        :param tags: Opaque identifiers meaningful to the API user
        :type  datasources: :class:`list` of :class:`Datasource` or ``None``
        :param datasources: The 'datasources' represent the sources from which data will be
            fetched. Currently, only NSX-API is supported as a 'default'
            datasource. An example of specifying 'default' datasource along
            with the urls to fetch data from is given at 'example_request'
            section of 'CreateWidgetConfiguration' API.
        :type  default_filter_value: :class:`list` of :class:`DefaultFilterValue` or ``None``
        :param default_filter_value: Default filter values to be passed to datasources. This will be
            used when the report is requested without filter values.
        :type  drilldown_id: :class:`str` or ``None``
        :param drilldown_id: Id of drilldown widget, if any. Id should be a valid id of an
            existing widget. A widget is considered as drilldown widget when it
            is associated with any other widget and provides more detailed
            information about any data item from the parent widget.
        :type  filter: :class:`str` or ``None``
        :param filter: Id of filter widget for subscription, if any. Id should be a valid
            id of an existing filter widget. Filter widget should be from the
            same view. Datasource URLs should have placeholder values equal to
            filter alias to accept the filter value on filter change.
        :type  filter_value_required: :class:`bool` or ``None``
        :param filter_value_required: Flag to indicate that widget will continue to work without filter
            value. If this flag is set to false then default_filter_value is
            manadatory.
        :type  footer: :class:`Footer` or ``None``
        :param footer: 
        :type  icons: :class:`list` of :class:`Icon` or ``None``
        :param icons: Icons to be applied at dashboard for widgets and UI elements.
        :type  is_drilldown: :class:`bool` or ``None``
        :param is_drilldown: Set to true if this widget should be used as a drilldown.
        :type  legend: :class:`Legend` or ``None``
        :param legend: Legend to be displayed. If legend is not needed, do not include it.
        :type  shared: :class:`bool` or ``None``
        :param shared: Please use the property 'shared' of View instead of this. The
            widgets of a shared view are visible to other users.
        :type  span: :class:`long` or ``None``
        :param span: Represents the horizontal span of the widget / container. format:
            int32
        :type  weight: :class:`long` or ``None``
        :param weight: Specify relavite weight in WidgetItem for placement in a view.
            Please see WidgetItem for details. format: int32
        """
        self.links = links
        self.schema = schema
        self.self_ = self_
        self.revision = revision
        self.create_time = create_time
        self.create_user = create_user
        self.last_modified_time = last_modified_time
        self.last_modified_user = last_modified_user
        self.protection = protection
        self.system_owned = system_owned
        self.description = description
        self.display_name = display_name
        self.id = id
        self._resource_type = resource_type
        self.tags = tags
        self.datasources = datasources
        self.default_filter_value = default_filter_value
        self.drilldown_id = drilldown_id
        self.filter = filter
        self.filter_value_required = filter_value_required
        self.footer = footer
        self.icons = icons
        self.is_drilldown = is_drilldown
        self.legend = legend
        self.shared = shared
        self.span = span
        self.weight = weight
        VapiStruct.__init__(self)

    @property
    def resource_type(self):
        """
        Return the discriminator value
        """
        return self._resource_type

WidgetConfiguration._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.widget_configuration', {
        '_links': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'ResourceLink'))),
        '_schema': type.OptionalType(type.StringType()),
        '_self': type.OptionalType(type.ReferenceType(__name__, 'SelfResourceLink')),
        '_revision': type.OptionalType(type.IntegerType()),
        '_create_time': type.OptionalType(type.IntegerType()),
        '_create_user': type.OptionalType(type.StringType()),
        '_last_modified_time': type.OptionalType(type.IntegerType()),
        '_last_modified_user': type.OptionalType(type.StringType()),
        '_protection': type.OptionalType(type.StringType()),
        '_system_owned': type.OptionalType(type.BooleanType()),
        'description': type.OptionalType(type.StringType()),
        'display_name': type.OptionalType(type.StringType()),
        'id': type.OptionalType(type.StringType()),
        'resource_type': type.StringType(),
        'tags': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Tag'))),
        'datasources': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Datasource'))),
        'default_filter_value': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'DefaultFilterValue'))),
        'drilldown_id': type.OptionalType(type.StringType()),
        'filter': type.OptionalType(type.StringType()),
        'filter_value_required': type.OptionalType(type.BooleanType()),
        'footer': type.OptionalType(type.ReferenceType(__name__, 'Footer')),
        'icons': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'Icon'))),
        'is_drilldown': type.OptionalType(type.BooleanType()),
        'legend': type.OptionalType(type.ReferenceType(__name__, 'Legend')),
        'shared': type.OptionalType(type.BooleanType()),
        'span': type.OptionalType(type.IntegerType()),
        'weight': type.OptionalType(type.IntegerType()),
    },
    WidgetConfiguration,
    False,
    None))



class WidgetConfigurationList(VapiStruct):
    """
    Represents a list of widget configurations.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'widgetconfigurations': 'widgetconfigurations',
                            }

    def __init__(self,
                 widgetconfigurations=None,
                ):
        """
        :type  widgetconfigurations: :class:`list` of :class:`vmware.vapi.struct.VapiStruct` or ``None``
        :param widgetconfigurations: Array of widget configurations
            When clients pass a value of this class as a parameter, the
            attribute must contain all the attributes defined in
            :class:`WidgetConfiguration`. When methods return a value of this
            class as a return value, the attribute will contain all the
            attributes defined in :class:`WidgetConfiguration`.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.widgetconfigurations = widgetconfigurations
        VapiStruct.__init__(self)


WidgetConfigurationList._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.widget_configuration_list', {
        'widgetconfigurations': type.OptionalType(type.ListType(type.DynamicStructType('vmware.vapi.dynamic_struct', {}, VapiStruct, [type.ReferenceType(__name__, 'WidgetConfiguration')]))),
    },
    WidgetConfigurationList,
    False,
    None))



class WidgetItem(VapiStruct):
    """
    Represents a reference to a widget that is held by a container or a
    multi-widget or a View.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    ALIGNMENT_LEFT = "LEFT"
    """


    """
    ALIGNMENT_RIGHT = "RIGHT"
    """


    """



    _canonical_to_pep_names = {
                            'alignment': 'alignment',
                            'label': 'label',
                            'separator': 'separator',
                            'weight': 'weight',
                            'widget_id': 'widget_id',
                            }

    def __init__(self,
                 alignment=None,
                 label=None,
                 separator=None,
                 weight=None,
                 widget_id=None,
                ):
        """
        :type  alignment: :class:`str` or ``None``
        :param alignment: Possible values are: 
            
            * :attr:`WidgetItem.ALIGNMENT_LEFT`
            * :attr:`WidgetItem.ALIGNMENT_RIGHT`
            
             Aligns widget either left or right.
        :type  label: :class:`Label` or ``None``
        :param label: Applicable for 'DonutConfiguration' and 'StatsConfiguration'
            reports only. If label is not specified, then it defaults to the
            label of the donut or stats report.
        :type  separator: :class:`bool` or ``None``
        :param separator: If true, separates this widget in a container.
        :type  weight: :class:`long` or ``None``
        :param weight: Determines placement of widget or container relative to other
            widgets and containers. The lower the weight, the higher it is in
            the placement order. format: int32
        :type  widget_id: :class:`str` or ``None``
        :param widget_id: Id of the widget configuration that is held by a multi-widget or a
            container or a view.
        """
        self.alignment = alignment
        self.label = label
        self.separator = separator
        self.weight = weight
        self.widget_id = widget_id
        VapiStruct.__init__(self)


WidgetItem._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.widget_item', {
        'alignment': type.OptionalType(type.StringType()),
        'label': type.OptionalType(type.ReferenceType(__name__, 'Label')),
        'separator': type.OptionalType(type.BooleanType()),
        'weight': type.OptionalType(type.IntegerType()),
        'widget_id': type.OptionalType(type.StringType()),
    },
    WidgetItem,
    False,
    None))



class X509Certificate(VapiStruct):
    """


    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """
    ECDSA_EC_FIELD_F2M = "F2M"
    """


    """
    ECDSA_EC_FIELD_FP = "FP"
    """


    """
    PUBLIC_KEY_ALGO_RSA = "RSA"
    """


    """
    PUBLIC_KEY_ALGO_DSA = "DSA"
    """


    """
    PUBLIC_KEY_ALGO_ECDSA = "ECDSA"
    """


    """



    _canonical_to_pep_names = {
                            'dsa_public_key_g': 'dsa_public_keyg',
                            'dsa_public_key_p': 'dsa_public_keyp',
                            'dsa_public_key_q': 'dsa_public_keyq',
                            'dsa_public_key_y': 'dsa_public_keyy',
                            'ecdsa_curve_name': 'ecdsa_curve_name',
                            'ecdsa_ec_field': 'ecdsa_ec_field',
                            'ecdsa_ec_field_f2mks': 'ecdsa_ec_field_f2mks',
                            'ecdsa_ec_field_f2mm': 'ecdsa_ec_field_f2mm',
                            'ecdsa_ec_field_f2mrp': 'ecdsa_ec_field_f2mrp',
                            'ecdsa_ec_field_f2pp': 'ecdsa_ec_field_f2pp',
                            'ecdsa_public_key_a': 'ecdsa_public_keya',
                            'ecdsa_public_key_b': 'ecdsa_public_keyb',
                            'ecdsa_public_key_cofactor': 'ecdsa_public_key_cofactor',
                            'ecdsa_public_key_generator_x': 'ecdsa_public_key_generatorx',
                            'ecdsa_public_key_generator_y': 'ecdsa_public_key_generatory',
                            'ecdsa_public_key_order': 'ecdsa_public_key_order',
                            'ecdsa_public_key_seed': 'ecdsa_public_key_seed',
                            'is_ca': 'is_ca',
                            'is_valid': 'is_valid',
                            'issuer': 'issuer',
                            'issuer_cn': 'issuer_cn',
                            'not_after': 'not_after',
                            'not_before': 'not_before',
                            'public_key_algo': 'public_key_algo',
                            'public_key_length': 'public_key_length',
                            'rsa_public_key_exponent': 'rsa_public_key_exponent',
                            'rsa_public_key_modulus': 'rsa_public_key_modulus',
                            'serial_number': 'serial_number',
                            'signature': 'signature',
                            'signature_algorithm': 'signature_algorithm',
                            'subject': 'subject',
                            'subject_cn': 'subject_cn',
                            'version': 'version',
                            }

    def __init__(self,
                 dsa_public_keyg=None,
                 dsa_public_keyp=None,
                 dsa_public_keyq=None,
                 dsa_public_keyy=None,
                 ecdsa_curve_name=None,
                 ecdsa_ec_field=None,
                 ecdsa_ec_field_f2mks=None,
                 ecdsa_ec_field_f2mm=None,
                 ecdsa_ec_field_f2mrp=None,
                 ecdsa_ec_field_f2pp=None,
                 ecdsa_public_keya=None,
                 ecdsa_public_keyb=None,
                 ecdsa_public_key_cofactor=None,
                 ecdsa_public_key_generatorx=None,
                 ecdsa_public_key_generatory=None,
                 ecdsa_public_key_order=None,
                 ecdsa_public_key_seed=None,
                 is_ca=None,
                 is_valid=None,
                 issuer=None,
                 issuer_cn=None,
                 not_after=None,
                 not_before=None,
                 public_key_algo=None,
                 public_key_length=None,
                 rsa_public_key_exponent=None,
                 rsa_public_key_modulus=None,
                 serial_number=None,
                 signature=None,
                 signature_algorithm=None,
                 subject=None,
                 subject_cn=None,
                 version=None,
                ):
        """
        :type  dsa_public_keyg: :class:`str` or ``None``
        :param dsa_public_keyg: One of the DSA cryptogaphic algorithm's strength parameters, base.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  dsa_public_keyp: :class:`str` or ``None``
        :param dsa_public_keyp: One of the DSA cryptogaphic algorithm's strength parameters, prime.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  dsa_public_keyq: :class:`str` or ``None``
        :param dsa_public_keyq: One of the DSA cryptogaphic algorithm's strength parameters,
            sub-prime.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  dsa_public_keyy: :class:`str` or ``None``
        :param dsa_public_keyy: One of the DSA cryptogaphic algorithm's strength parameters.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  ecdsa_curve_name: :class:`str` or ``None``
        :param ecdsa_curve_name: The Curve name for the ECDSA certificate.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  ecdsa_ec_field: :class:`str` or ``None``
        :param ecdsa_ec_field: Possible values are: 
            
            * :attr:`X509Certificate.ECDSA_EC_FIELD_F2M`
            * :attr:`X509Certificate.ECDSA_EC_FIELD_FP`
            
             Represents an elliptic curve (EC) finite field in ECDSA.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  ecdsa_ec_field_f2mks: :class:`list` of :class:`long` or ``None``
        :param ecdsa_ec_field_f2mks: The order of the middle term(s) of the reduction polynomial in
            elliptic curve (EC) | characteristic 2 finite field.| Contents of
            this array are copied to protect against subsequent modification in
            ECDSA. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  ecdsa_ec_field_f2mm: :class:`long` or ``None``
        :param ecdsa_ec_field_f2mm: The first coefficient of this elliptic curve in elliptic curve (EC)
            | characteristic 2 finite field for ECDSA. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  ecdsa_ec_field_f2mrp: :class:`str` or ``None``
        :param ecdsa_ec_field_f2mrp: The value whose i-th bit corresponds to the i-th coefficient of the
            reduction polynomial | in elliptic curve (EC) characteristic 2
            finite field for ECDSA.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  ecdsa_ec_field_f2pp: :class:`str` or ``None``
        :param ecdsa_ec_field_f2pp: The specified prime for the elliptic curve prime finite field in
            ECDSA.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  ecdsa_public_keya: :class:`str` or ``None``
        :param ecdsa_public_keya: The first coefficient of this elliptic curve in ECDSA.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  ecdsa_public_keyb: :class:`str` or ``None``
        :param ecdsa_public_keyb: The second coefficient of this elliptic curve in ECDSA.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  ecdsa_public_key_cofactor: :class:`long` or ``None``
        :param ecdsa_public_key_cofactor: The co-factor in ECDSA. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  ecdsa_public_key_generatorx: :class:`str` or ``None``
        :param ecdsa_public_key_generatorx: X co-ordinate of G (the generator which is also known as the base
            point) in ECDSA.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  ecdsa_public_key_generatory: :class:`str` or ``None``
        :param ecdsa_public_key_generatory: Y co-ordinate of G (the generator which is also known as the base
            point) in ECDSA.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  ecdsa_public_key_order: :class:`str` or ``None``
        :param ecdsa_public_key_order: The order of generator G in ECDSA.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  ecdsa_public_key_seed: :class:`list` of :class:`str` or ``None``
        :param ecdsa_public_key_seed: The bytes used during curve generation for later validation in
            ECDSA.| Contents of this array are copied to protect against
            subsequent modification.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  is_ca: :class:`bool` or ``None``
        :param is_ca: True if this is a CA certificate.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  is_valid: :class:`bool` or ``None``
        :param is_valid: True if this certificate is valid.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  issuer: :class:`str` or ``None``
        :param issuer: The certificate issuers complete distinguished name.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  issuer_cn: :class:`str` or ``None``
        :param issuer_cn: The certificate issuer's common name.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  not_after: :class:`long` or ``None``
        :param not_after: The time in epoch milliseconds at which the certificate becomes
            invalid. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  not_before: :class:`long` or ``None``
        :param not_before: The time in epoch milliseconds at which the certificate becomes
            valid. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  public_key_algo: :class:`str` or ``None``
        :param public_key_algo: Possible values are: 
            
            * :attr:`X509Certificate.PUBLIC_KEY_ALGO_RSA`
            * :attr:`X509Certificate.PUBLIC_KEY_ALGO_DSA`
            * :attr:`X509Certificate.PUBLIC_KEY_ALGO_ECDSA`
            
            Cryptographic algorithm used by the public key for data encryption.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  public_key_length: :class:`long` or ``None``
        :param public_key_length: Size measured in bits of the public/private keys used in a
            cryptographic algorithm. format: int64
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  rsa_public_key_exponent: :class:`str` or ``None``
        :param rsa_public_key_exponent: An RSA public key is made up of the modulus and the public
            exponent. Exponent is a power number.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  rsa_public_key_modulus: :class:`str` or ``None``
        :param rsa_public_key_modulus: An RSA public key is made up of the modulus and the public
            exponent. Modulus is wrap around number.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  serial_number: :class:`str` or ``None``
        :param serial_number: Certificate's serial number.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  signature: :class:`str` or ``None``
        :param signature: The signature value(the raw signature bits) used for signing and
            validate the cert.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  signature_algorithm: :class:`str` or ``None``
        :param signature_algorithm: The algorithm used by the Certificate Authority to sign the
            certificate.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  subject: :class:`str` or ``None``
        :param subject: The certificate owners complete distinguished name.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  subject_cn: :class:`str` or ``None``
        :param subject_cn: The certificate owner's common name.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  version: :class:`str` or ``None``
        :param version: Certificate version (default v1).
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.dsa_public_keyg = dsa_public_keyg
        self.dsa_public_keyp = dsa_public_keyp
        self.dsa_public_keyq = dsa_public_keyq
        self.dsa_public_keyy = dsa_public_keyy
        self.ecdsa_curve_name = ecdsa_curve_name
        self.ecdsa_ec_field = ecdsa_ec_field
        self.ecdsa_ec_field_f2mks = ecdsa_ec_field_f2mks
        self.ecdsa_ec_field_f2mm = ecdsa_ec_field_f2mm
        self.ecdsa_ec_field_f2mrp = ecdsa_ec_field_f2mrp
        self.ecdsa_ec_field_f2pp = ecdsa_ec_field_f2pp
        self.ecdsa_public_keya = ecdsa_public_keya
        self.ecdsa_public_keyb = ecdsa_public_keyb
        self.ecdsa_public_key_cofactor = ecdsa_public_key_cofactor
        self.ecdsa_public_key_generatorx = ecdsa_public_key_generatorx
        self.ecdsa_public_key_generatory = ecdsa_public_key_generatory
        self.ecdsa_public_key_order = ecdsa_public_key_order
        self.ecdsa_public_key_seed = ecdsa_public_key_seed
        self.is_ca = is_ca
        self.is_valid = is_valid
        self.issuer = issuer
        self.issuer_cn = issuer_cn
        self.not_after = not_after
        self.not_before = not_before
        self.public_key_algo = public_key_algo
        self.public_key_length = public_key_length
        self.rsa_public_key_exponent = rsa_public_key_exponent
        self.rsa_public_key_modulus = rsa_public_key_modulus
        self.serial_number = serial_number
        self.signature = signature
        self.signature_algorithm = signature_algorithm
        self.subject = subject
        self.subject_cn = subject_cn
        self.version = version
        VapiStruct.__init__(self)


X509Certificate._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.x509_certificate', {
        'dsa_public_key_g': type.OptionalType(type.StringType()),
        'dsa_public_key_p': type.OptionalType(type.StringType()),
        'dsa_public_key_q': type.OptionalType(type.StringType()),
        'dsa_public_key_y': type.OptionalType(type.StringType()),
        'ecdsa_curve_name': type.OptionalType(type.StringType()),
        'ecdsa_ec_field': type.OptionalType(type.StringType()),
        'ecdsa_ec_field_f2mks': type.OptionalType(type.ListType(type.IntegerType())),
        'ecdsa_ec_field_f2mm': type.OptionalType(type.IntegerType()),
        'ecdsa_ec_field_f2mrp': type.OptionalType(type.StringType()),
        'ecdsa_ec_field_f2pp': type.OptionalType(type.StringType()),
        'ecdsa_public_key_a': type.OptionalType(type.StringType()),
        'ecdsa_public_key_b': type.OptionalType(type.StringType()),
        'ecdsa_public_key_cofactor': type.OptionalType(type.IntegerType()),
        'ecdsa_public_key_generator_x': type.OptionalType(type.StringType()),
        'ecdsa_public_key_generator_y': type.OptionalType(type.StringType()),
        'ecdsa_public_key_order': type.OptionalType(type.StringType()),
        'ecdsa_public_key_seed': type.OptionalType(type.ListType(type.StringType())),
        'is_ca': type.OptionalType(type.BooleanType()),
        'is_valid': type.OptionalType(type.BooleanType()),
        'issuer': type.OptionalType(type.StringType()),
        'issuer_cn': type.OptionalType(type.StringType()),
        'not_after': type.OptionalType(type.IntegerType()),
        'not_before': type.OptionalType(type.IntegerType()),
        'public_key_algo': type.OptionalType(type.StringType()),
        'public_key_length': type.OptionalType(type.IntegerType()),
        'rsa_public_key_exponent': type.OptionalType(type.StringType()),
        'rsa_public_key_modulus': type.OptionalType(type.StringType()),
        'serial_number': type.OptionalType(type.StringType()),
        'signature': type.OptionalType(type.StringType()),
        'signature_algorithm': type.OptionalType(type.StringType()),
        'subject': type.OptionalType(type.StringType()),
        'subject_cn': type.OptionalType(type.StringType()),
        'version': type.OptionalType(type.StringType()),
    },
    X509Certificate,
    False,
    None))



class X509Crl(VapiStruct):
    """
    A CRL is a time-stamped list identifying revoked certificates.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'crl_entries': 'crl_entries',
                            'issuer': 'issuer',
                            'next_update': 'next_update',
                            'version': 'version',
                            }

    def __init__(self,
                 crl_entries=None,
                 issuer=None,
                 next_update=None,
                 version=None,
                ):
        """
        :type  crl_entries: :class:`list` of :class:`X509CrlEntry` or ``None``
        :param crl_entries: List of X509CrlEntry.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  issuer: :class:`str` or ``None``
        :param issuer: Issuer's distinguished name. (DN)
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  next_update: :class:`str` or ``None``
        :param next_update: Next update time for the CRL.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  version: :class:`str` or ``None``
        :param version: CRL's version number either 1 or 2.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.crl_entries = crl_entries
        self.issuer = issuer
        self.next_update = next_update
        self.version = version
        VapiStruct.__init__(self)


X509Crl._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.x509_crl', {
        'crl_entries': type.OptionalType(type.ListType(type.ReferenceType(__name__, 'X509CrlEntry'))),
        'issuer': type.OptionalType(type.StringType()),
        'next_update': type.OptionalType(type.StringType()),
        'version': type.OptionalType(type.StringType()),
    },
    X509Crl,
    False,
    None))



class X509CrlEntry(VapiStruct):
    """
    Each revoked certificate is identified in a CRL by its certificate serial
    number.

    .. tip::
        The arguments are used to initialize data attributes with the same
        names.
    """



    _canonical_to_pep_names = {
                            'revocation_date': 'revocation_date',
                            'serial_number': 'serial_number',
                            }

    def __init__(self,
                 revocation_date=None,
                 serial_number=None,
                ):
        """
        :type  revocation_date: :class:`str` or ``None``
        :param revocation_date: Revocation date.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        :type  serial_number: :class:`str` or ``None``
        :param serial_number: The revoked certificate's serial number.
            This attribute may be present in responses from the server, but if
            it is present in a request to server it will be ignored.
        """
        self.revocation_date = revocation_date
        self.serial_number = serial_number
        VapiStruct.__init__(self)


X509CrlEntry._set_binding_type(type.StructType(
    'com.vmware.nsx_policy.model.x509_crl_entry', {
        'revocation_date': type.OptionalType(type.StringType()),
        'serial_number': type.OptionalType(type.StringType()),
    },
    X509CrlEntry,
    False,
    None))




class StubFactory(StubFactoryBase):
    _attrs = {
    }

